mysql - 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 行。
你能给我任何提示或解决方案吗?谢谢你。
解决方案
由于您有一个主键ResultID
,您可以简单地使用INSERT ... ON DUPLICATE KEY UPDATE
查询将所有数据从以下传输TableB
到TableA
:
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
推荐阅读
- laravel - Laravel pluck with paginate
- java - How to handle thousands of error message constant in java?
- python - Regex - Word boundary not working even with raw-string
- node.js - NPM install current application globally (e.g. npm install -g .)
- vb.net - How to load a specific text in textbox with greyish colour and uneditable
- video - How to Concatenate Multiple Videos Using Cross fade in between and fade out at the end (FFMPEG)
- docker - Docker 最大容器大小是 100GB 吗?
- valueerror - 如果发生 ValueError,我如何打印消息?
- javascript - 如何从 JS 调用函数到 HTML
- mongodb - 在 docker build 期间保留文件,如 buildkit