You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

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

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.09.25 08:36:05