我有两个包含两个表的MySQL数据库,让我们称它们为TABLE_A和TABLE_B。这两个表都包含字段id
和title
。两个数据库都在同一台服务器上,同一个用户可以访问这两个数据库。
现在,TABLE_A是TABLE_B的子集,用于关注title
字段。这意味着TABLE_B中的每个title
也存在于TABLE_B中。虽然这两个表的id
字段没有任何关联。
我需要的是根据标题将TABLE_A中的id
字段与TABLE_B中的id
字段同步,即相同title
,同一id
。如果不清楚,我必须保存TABLE_B id
并覆盖TABLE_A。而且我不必将TABLE_B中缺少的title
添加到TABLE_A。
有人建议使用时态表来复制与TABLE_A共同的所有TABLE_B字段,然后将其重命名为TABLE_A。我不能这样做,因为TABLE_A实际上还有我需要维护的其他字段。所以,我不能完全放弃旧的TABLE_A。
此外,id
是两个表的主键。这意味着我不能简单地从TABLE_B复制到TABLE_A,因为一旦我尝试将一个id
更改为另一个已存在于TABLE_A中但链接到另一个title
的查询将失败。 / p>
我知道如何编写Perl或PHP脚本来完成它,但我想知道是否存在纯MySQL解决方案。
答案 0 :(得分:3)
你可以这样做
CREATE TABLE TableA_TMP AS
SELECT * FROM TableA;
ALTER TABLE TableA_TMP ADD id_new int;
UPDATE TableA_TMP A INNER JOIN TableB B ON lower(A.title) = lower(B.title)
SET id_new = B.id;
RENAME TABLE TableA TO TableA_backup;
CREATE TableA AS
select id_new as id, title,.... from TableA_TMP;