SQL中NOT IN子句使用多列匹配实现差异数据插入的方法
双字段匹配的跨表插入SQL写法
方案1:多列行匹配NOT IN写法(主流数据库通用)
MySQL、PostgreSQL、Oracle等绝大多数主流数据库都支持行级比较语法,可以直接在NOT IN前指定多个字段匹配:
INSERT INTO table2 SELECT * FROM table1 t1 WHERE (t1.Book, t1.price) NOT IN ( SELECT Book, price FROM table2 );
注意:如果子查询返回的
Book或price字段存在NULL值,NOT IN会返回空结果集,不会插入任何数据,这种场景建议使用更稳妥的NOT EXISTS写法。
方案2:NOT EXISTS写法(全兼容所有SQL标准数据库)
这种写法兼容性最强,对NULL值的处理也符合预期,更推荐日常使用:
INSERT INTO table2 SELECT * FROM table1 t1 WHERE NOT EXISTS ( SELECT 1 FROM table2 t2 WHERE t2.Book = t1.Book AND t2.price = t1.price );
内容的提问来源于stack exchange,提问作者Kavya14
相关产品推荐
相关产品推荐

