2017-05-01 46 views
-1

我搜索并尝试了所有应用我发现但没有运气的东西。MySQL查询比较2个表中的数据并更新其他数据

我有2个表,我需要在1

表1

ID  Year Name 

4015 2016 Acura 
4016 2016 Alfa+Romeo 
4017 2016 Aston+Martin 
4018 2016 Audi 
4019 2016 Bentley 
4020 2016 BMW 
4021 2016 Buick 
4022 2016 Cadillac 
4023 2016 Chevrolet 
4024 2016 Chrysler 
4025 2016 Daewoo 
4026 2016 Daihatsu 
4027 2016 Dodge 
4028 2016 Eagle 
4029 2016 Ferrari 
4030 2016 Fiat 
4031 2016 Fisker 
4032 2016 Ford 
4033 2016 Geo 
4034 2016 GMC 
4035 2016 Honda 
4036 2016 HUMMER 
4037 2016 Hyundai 
4038 2016 INFINITI 
4039 2016 Isuzu 
4040 2016 Jaguar 
4041 2016 Jeep 
4042 2016 Kia 
4043 2016 Lamborghini 
4044 2016 Land+Rover 
4045 2016 Lexus 
4046 2016 Lincoln 
4047 2016 Lotus 
4048 2016 Maserati 
4049 2016 Maybach 
4050 2016 Mazda 
4051 2016 McLaren 
4052 2016 Mercedes-Benz 
4053 2016 Mercury 
4054 2016 MINI 
4055 2016 Mitsubishi 
4056 2016 Nissan 
4057 2016 Oldsmobile 
4058 2016 Panoz 
4059 2016 Plymouth 
4060 2016 Pontiac 
4061 2016 Porsche 
4062 2016 Ram 
4063 2016 Rolls-Royce 
4064 2016 Saab 
4065 2016 Saturn 
4066 2016 Scion 
4067 2016 smart 
4068 2016 SRT 
4069 2016 Subaru 
4070 2016 Suzuki 
4071 2016 Tesla 
4072 2016 Toyota 
4073 2016 Volkswagen 
4074 2016 Volvo 

在每个比较2个字段和更新域我需要与要更新“类型”字段表2中与Table1.Year和Table1.Name与Table2.Year和Table2.Make匹配的 记录的Table1的ID#。

示例:表2 ID#49224的“类别”应该是来自表1的ID#4030。

表2

ID Category Year Make   

49206 0  2016 Acura   
49207 0  2016 Audi   
49208 0  2016 Audi   
49209 0  2016 Audi   
49210 0  2016 Audi   
49211 0  2016 Ford   
49212 0  2016 Honda   
49213 0  2016 Jaguar  
49214 0  2016 Jaguar  
49215 0  2016 Jaguar  
49216 0  2016 Kia  
49217 0  2016 Kia 
49218 0  2016 Kia 
49219 0  2016 Kia 
49220 0  2016 Mazda   
49221 0  2016 Mazda   
49222 0  2016 Mazda   
49223 0  2016 Mercedes-Benz 
49224 0  2016 Fiat 

任何帮助将不胜感激。谢谢

+0

见https://meta.stackoverflow.com/questions/333952/why-should-i-provide-an-mcve -for-what-seems-to-what-to-very-simple-sql-query – Strawberry

回答

0
create table3 as 
select 
a.year, 
a.make, 
a.id, 
b.id as category 
from table2 a 
inner join 
table1 b 
on 
a.year=b.year 
and 
a.make=b.make 

应该这样做吗?

+0

这将显示第1行将错误复制到SQL窗口时出现的错误。 – Syclops

+0

伴侣,我不能让你完成所有的事情。可能有一些小问题。也许你必须做'创建table table3'。我想要做的事情应该在那里。 – Henry

+0

谢谢,在第一行的“创建”中添加了“table”之后,这个工作很完美。同样如上所述,我执行了我的专用服务器的硬件重新启动,所以我上面的错误也得到了解决。感谢您花时间帮助新手。 – Syclops

1

此查询将匹配每个类别,它会更新表。如果发生的是集(MakeYear)不存在categoryNULL

UPDATE Table2 t2 
    SET category = (SELECT id FROM Table1 t1 
        WHERE t2.Make = t1.Name 
        AND t2.Year = t1.Year) 
+0

我试过这一个,它运行了一段时间,然后在MySQL工作台给我这个错误。锁超时超时;尝试重新启动交易\t 50.922秒 – Syclops

+0

另外我不知道它是否有任何区别,但实际的Table1包含4194个记录,Table2包含45030个记录。 – Syclops

+0

我不确定这是否可能是我的专用服务器上的红色进程,所以我执行了硬件重新启动我的服务器,我将再次尝试这一个,我会让你知道发生了什么。谢谢您的帮助。 – Syclops