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

两表关联:保留仅存在于TableB而非TableA的记录

解决方案:提取TableB独有的记录

示例数据

TableA

IDName
1BOB
2JOS

TableB

IDName
1BOB
2JOS
3JEF

预期输出

IDName
3JEF

下面是几种通用的SQL实现方案:


方法1:LEFT JOIN + IS NULL(跨数据库通用)

这是最兼容的写法,几乎所有关系型数据库都支持:

SELECT b.ID, b.Name
FROM TableB b
LEFT JOIN TableA a ON b.ID = a.ID
WHERE a.ID IS NULL;

原理:用左连接保留TableB的所有记录,筛选出TableA中匹配不到的条目(即a.ID为NULL的行),就是TableB独有的数据。


方法2:NOT EXISTS(性能友好)

如果你的数据库支持子查询,这种写法在有索引的情况下性能更优:

SELECT b.ID, b.Name
FROM TableB b
WHERE NOT EXISTS (
    SELECT 1 FROM TableA a WHERE a.ID = b.ID
);

原理:逐条检查TableB的记录,只要在TableA中找不到对应ID的,就保留这条记录。


方法3:EXCEPT/MINUS(部分数据库支持)

针对SQL Server、PostgreSQL等支持EXCEPT的数据库,或者Oracle的MINUS,可以用更简洁的集合运算:

-- SQL Server/PostgreSQL 写法
SELECT ID, Name FROM TableB
EXCEPT
SELECT ID, Name FROM TableA;

-- Oracle 写法
SELECT ID, Name FROM TableB
MINUS
SELECT ID, Name FROM TableA;

原理:直接取TableB的结果集减去TableA的结果集,得到的就是TableB独有的数据。注意EXCEPT会自动去重,若要保留重复记录,可改用EXCEPT ALL。

内容的提问来源于stack exchange,提问作者Kris

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.08.10 12:35:28