Mysql 如何基于其他表中的数据在sql中查询更新
我有两张桌子。 例如:Mysql 如何基于其他表中的数据在sql中查询更新,mysql,sql,Mysql,Sql,我有两张桌子。 例如: table1 ID, data_static1, name1 1 8 Muna 2 1 Andi 3 7 null table2 ID, data_static2, name2 1 0 Aji 2 1 Andi 3 2 max 4 3 nadine 5 4
table1
ID, data_static1, name1
1 8 Muna
2 1 Andi
3 7 null
table2
ID, data_static2, name2
1 0 Aji
2 1 Andi
3 2 max
4 3 nadine
5 4 Rio
6 5 Panji
7 6 Eko
8 7 Pan
9 8 Muna
我想根据table1
中的最大ID更新table1中的列name1
,其中table1。data\u static1
与table2.data\u static2
相同
我想要的结果如下
table1
ID, data_static1, name
1 8 Muna
2 1 Andi
3 7 Pan
我尝试了以下代码
mysql> UPDATE theDB.table1 SET name1=(SELECT name2 FROM table2 WHERE data_static2=(SELECT data_static1 From table1 WHERE ID IN(SELECT MAX(ID) FROM table1))) WHERE table1.ID IN(SELECT MAX(table1.ID) FROM theDB.table1);
我收到一条错误消息
ERROR 1093 (HY000): You can't specify target table 'table1' for update in FROM clause
最简单的解决方案是使用相关子查询:
update table1 t1
set name1 = (
select name2
from table2 t2
where t1.data_static1 = t2.data_static2
order by id desc limit 1
);
您也可以使用“加入”:
update table1 t1
join (
select *
from table2 t
join (
select data_static2,
max(id) as id
from table2
group by data_static2
) t2 using (data_static2, id)
) t2 on t1.data_static1 = t2.data_static2
set t1.name1 = t2.name2;
请参阅@adjieq-这些称为别名。定义后,可以使用它们而不是整个表名来引用列。它们有助于可读性。