如何结合使用INSERT INTO与JOIN实现跨表去重插入
解决方案
核心实现逻辑
通过左连接筛选出t2中未在t1出现过的独有记录,再批量插入到主表t1中,重复判断规则为Date和Details两个字段同时匹配。
符合INSERT+JOIN要求的SQL写法
INSERT INTO t1 (Date, Details) SELECT t2.Date, t2.Details FROM t2 LEFT JOIN t1 ON t2.Date = t1.Date AND t2.Details = t1.Details WHERE t1.Date IS NULL;
写法说明
- 用
t2作为左表关联t1,关联条件设置为两个字段同时相等 - 关联后如果
t1.Date为NULL,说明这条t2的记录在t1中没有匹配项,正是需要插入的目标数据 - 执行后仅会插入
t2中两条独有的新记录,不会重复插入已经存在的匹配数据
其他可选写法(拓展)
如果所用数据库支持对应语法,也可以选择更简洁的实现:
EXCEPT语法版本
INSERT INTO t1 (Date, Details) SELECT Date, Details FROM t2 EXCEPT SELECT Date, Details FROM t1;
NOT EXISTS语法版本
INSERT INTO t1 (Date, Details) SELECT t2.Date, t2.Details FROM t2 WHERE NOT EXISTS ( SELECT 1 FROM t1 WHERE t1.Date = t2.Date AND t1.Details = t2.Details );
最终执行效果
插入完成后t1的完整数据如下:
Date Details ------------------------------- 01-02-2021 11.02 completed 01-02-2021 01.30 cancelled 02-03-2021 03.30 running 02-03-2021 05.30 failed
内容的提问来源于stack exchange,提问作者krishnadas
相关产品推荐
相关产品推荐

