MySQL:如何通过WHERE子句将一张表的数据复制到另一张表
批量同步table1数据到table2的正确SQL写法
嘿,我懂你想把table1里的data批量匹配number同步到table2对应记录里的需求~你之前用的INSERT语句路子不对哦,因为INSERT是用来新增行的,而你要的是更新table2里已有的对应记录,或者兼顾新增和更新,下面给你两种场景的正确写法:
场景1:仅更新table2中已存在的记录
如果table2里已经有对应的number记录,只是要把table1的data同步过去,用UPDATE JOIN效率最高,适合批量操作:
UPDATE table2 t2 JOIN table1 t1 ON t2.number = t1.number SET t2.data = t1.data;
这个语句会把两张表通过number字段关联,一次性把所有匹配行的data字段从table1同步到table2。
场景2:同步新增+更新(不存在则插入,存在则更新)
如果table2里可能没有某些number的记录,想要同时完成“新增缺失记录+更新已有记录”的操作,就用INSERT ... ON DUPLICATE KEY UPDATE——不过前提是table2的number字段是主键或者唯一索引:
INSERT INTO table2 (number, data) SELECT number, data FROM table1 ON DUPLICATE KEY UPDATE data = VALUES(data);
原理是先从table1取出所有number和data尝试插入table2,要是某个number已经存在(触发唯一键冲突),就自动执行更新,把该记录的data替换成table1里的值。
另外提一句:你之前写的INSERT TO是语法错误,正确的写法是INSERT INTO,而且这个语句本身逻辑也不适合你的需求,因为INSERT是新增行,没办法直接关联table2的现有行赋值。
内容的提问来源于stack exchange,提问作者Björn C
相关产品推荐
相关产品推荐

