MySQL更新与子选择

时间:2011-06-24 10:56:06

标签: mysql

我有一个表可以将其称为table1,并且其中两列中的数据已被销毁。

幸运的是,我有一个旧表的备份。

在旧备份中,有问题的两列的值是正确的,但其余列已过时,因此我不能简单地导入整个转储。

所以我把它导入另一个我称之为table2的表中。每个记录的id都与两个表中的id相同。

所以基本上我需要一个查询,它将遍历table1中的每个记录,并使用table2中的相应值更新column1和column2。

3 个答案:

答案 0 :(得分:43)

原始表是table1,备份表是table2

UPDATE table1 t1 JOIN table2 t2 ON t1.id = t2.id
SET t1.col1 = t2.col1, t1.col2 = t2.col2, ...

答案 1 :(得分:15)

这适用于所有类型的SQL数据库:

update table1 t set
column1 = (select column1 from old_table where id = t.id),
column2 = (select column2 from old_table where id = t.id);

不需要任何特殊/聚合函数,因为id匹配将恰好命中一行。

答案 2 :(得分:1)

我认为你可以尝试这样的事情:

UPDATE table1 SET table1field = (SELECT MAX(table2.table2field) FROM table2 WHERE table1.table1field = table2.table2field)