如何使用MySQL批量更新(从选择中)

时间:2019-01-16 13:18:12

标签: mysql

我从一个旧数据库继承而来,每个公司部门拆分的数据非常相似。我的目标是将所有内容合并到一个架构中。由于每个部门架构都有自己的唯一ID,因此我需要在合并后使用新ID更新外键。

为了举例说明我的问题,让我们考虑以下两个表:

foobar

id name foreign_id
-- ---- ----------
1  foo  4
2  bar  6
3  baz  8
4  qux  4

翻译

old_id new_id
------ ------
7      3
9      4
8      9
4      1
6      5

转换表表示从旧ID(每个部门)到新ID(在合并模式中)的迁移信息。

我想更新所有外键以将旧ID替换为新ID。

完全手动的解决方案是执行以下操作:

UPDATE foobar SET foreign_id = 3 WHERE foreign_id = 7
...

但是此解决方案最终会产生冲突,因此我可以改用临时列:

UPDATE foobar SET new_foreign_id = 3 WHERE foreign_id = 7
...

然后放下foreign_id列并重命名new_foreign_id

我正在寻找一种更简单的解决方案,可以执行以下操作:

UPDATE foobar SET foreign_id = new_id 
FOREACH -- <-- Magic keyword
    SELECT * FROM foobar LEFT JOIN translate ON old_id = foreign_id 

这可能吗?

1 个答案:

答案 0 :(得分:2)

您可以使用UPDATE + JOIN。例如:

UPDATE foobar 
RIGHT JOIN translate ON translate.old_id = foobar.foreign_id 
SET foobar.foreign_id = translate.new_id