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

SQL查询求助:如何获取另一张表中不存在的指定字段数据

解决Table_1中Var1不在Table_2 Value2中的数据查询问题

嗨,我来帮你搞定这个SQL查询的问题!首先先理清楚你的需求:从Table_1里筛选出Var1字段的值没有出现在Table_2的Value2字段中的数据。先纠正个小细节,你给出的期望输出里ID应该是2和3(对应Var1=456和789),不是1和4哦,应该是笔误啦~

你原来SQL的问题

你写的left join加where t1.Var1 not in t2.Value2逻辑有问题:

  • 当LEFT JOIN没有匹配到Table_2的行时,t2.Value2会是NULL,而NOT IN遇到NULL会直接返回空结果,因为SQL里任何值和NULL比较都是未知;
  • 而且LEFT JOIN后再用NOT IN完全没必要,逻辑上绕了弯路。

正确的查询方法

这里给你三种常用且靠谱的写法,都能得到你想要的结果:

方法1:使用NOT IN

SELECT ID, Var1, Var2
FROM Table_1
WHERE Var1 NOT IN (SELECT Value2 FROM Table_2)

说明:子查询先取出Table_2所有的Value2值,再筛选Table_1中Var1不在这个集合里的行。如果Table_2的Value2可能存在NULL值,记得在子查询里加WHERE Value2 IS NOT NULL,否则NOT IN会返回空结果。

方法2:使用LEFT JOIN + IS NULL(推荐,更安全)

SELECT t1.ID, t1.Var1, t1.Var2
FROM Table_1 t1
LEFT JOIN Table_2 t2 ON t1.Var1 = t2.Value2
WHERE t2.Value2 IS NULL

说明:左连接会保留Table_1的所有行,那些在Table_2里找不到匹配的行,t2的所有字段都会是NULL。我们只需要筛选t2.Value2为NULL的行,就是目标数据。这个方法不受NULL值影响,兼容性和稳定性都很好。

方法3:使用NOT EXISTS

SELECT ID, Var1, Var2
FROM Table_1 t1
WHERE NOT EXISTS (
    SELECT 1
    FROM Table_2 t2
    WHERE t2.Value2 = t1.Var1
)

说明:NOT EXISTS会检查是否不存在与Table_1当前行匹配的Table_2行,只要找不到匹配就会保留该行。这个方法在有合适索引的情况下效率很高,同样不受NULL值影响。

验证结果

用你的表数据测试的话,这三种写法都会返回:

ID Var1 Var2
2  456  12
3  789  11

完全符合你的需求~

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.05.20 11:13:42