2

我有两个包含两个表的 MySQL 数据库,我们称它们为 TABLE_A 和 TABLE_B。这两个表都有 as 字段idtitle. 两个数据库都在同一台服务器上,同一用户可以访问两者。

现在,TABLE_A 是 TABLE_B 的一个子集,用于该title领域。这意味着titleTABLE_A 中的 every 也存在于 TABLE_B 中。虽然id这两个表的字段没有任何关系。

我需要的是根据标题将idTABLE_A 中的字段与TABLE_B 中的字段同步,即相同,相同。如果不清楚,我必须保存 TABLE_B并覆盖 TABLE_A 。而且我不必将 TABLE_B 中的缺失添加到 TABLE_A。idtitleididtitle

有人建议使用临时表复制所有与 TABLE_A 相同的 TABLE_B 字段,然后将其重命名为 TABLE_A。我不能遵循这种方式,因为 TABLE_A 实际上还有其他需要维护的字段。所以,我不能完全放弃旧的 TABLE_A。

此外,id是两个表的主键。这意味着我不能简单地从 TABLE_B 复制到 TABLE_A 因为一旦我尝试将一个更改id为另一个已经存在于 TABLE_A 但链接到不同的title.

我知道如何编写 Perl 或 PHP 脚本来执行此操作,但我想知道是否存在纯 MySQL 解决方案。

4

1 回答 1

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;  
于 2012-09-21T19:48:16.123 回答