首页 > 解决方案 > MySQL中带有'SET'的两个表之间的多列更新

问题描述

我有两个表如下。

表 A:

        ResultID(PK) | ImportDate | Comment1
        -------------------------------------
        101          | 25-09-2019 | One
        --------------------------------------
        102          | 25-09-2019 | Two
        --------------------------------------
        103          | 25-09-2019 | Three
        ----------------------------------------

表 B:

        ResultID(PK) | ImportDate | Comment2
        -------------------------------------
        101          | 26-09-2019 | new one
        --------------------------------------
        104          | 26-09-2019 | four
        --------------------------------------

所以输出应该看起来像

表 A:

ResultID(PK) | ImportDate | Comment1
-------------------------------------
101          | 26-09-2019 | new one
--------------------------------------
102          | 25-09-2019 | Two
--------------------------------------
103          | 25-09-2019 | Three
--------------------------------------
104          | 26-09-2019 | four
--------------------------------------

问题:ResultID如果表 A 和表 B 之间匹配,我想得到 上面提到的结果表 A ,我想从表 B 中更新表 A 中的所有列ResultID。如果ResultID表 B 中的表 A 中不存在,则将其插入表 A。

我在 MySQL 中尝试过的内容:

UPDATE TableA 
SET comment1=
(SELECT comment2 FROM TableB WHERE TableA.ResultId=TableB.ResultId);

上述解决方案仅适用于更新表 A 的一列。我还尝试使用 SQL Server 2005 执行 MySQL REPLACE INTO 的多列更新参考?但多列更新不适用于我的场景。

对于我的真实场景 - 我有 40 列和 50,000 行。

你能给我任何提示或解决方案吗?谢谢你。

标签: mysqlsqldatabase

解决方案


由于您有一个主键ResultID,您可以简单地使用INSERT ... ON DUPLICATE KEY UPDATE查询将所有数据从以下传输TableBTableA

INSERT INTO TableA (ResultID, ImportDate, Comment1)
SELECT ResultID, ImportDate, Comment2 FROM TableB
ON DUPLICATE KEY UPDATE
  ImportDate = VALUES(ImportDate),
  Comment1 = VALUES(Comment1);

输出:

ResultID    ImportDate  Comment1
101         26-09-2019  new one
102         25-09-2019  Two
103         25-09-2019  Three
104         26-09-2019  four

dbfiddle 上的演示


推荐阅读