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

SQL查询求助:如何获取表A中UniqueKey在B不在C的行?

搞定你的SQL查询需求:获取符合条件的表A数据

嘿,我来帮你解决这个SQL查询的问题!先明确你的核心需求:从表A中捞取那些对应的unique_key存在于表B,同时这个unique_key又不在表C里的行,最终要返回id、name、int_value和表B的unique_key字段。

先说说你尝试的两条SQL为啥不对

  • 第一条SQL里用LEFT JOIN ... ON b.unique_key <> c.unique_key,这逻辑完全跑偏了——只要B的key和C的key不一样就会生成关联行,结果会出来一堆不符合要求的数据,根本实现不了“不在C里”的过滤。
  • 第二条SQL思路其实沾边了,但你犯了个小错误:从B的子查询里只选了id,导致b.unique_key这个字段根本不存在,自然查不到正确结果;而且就算字段对了,子查询的写法也没必要这么绕。

给你两种靠谱的正确写法

写法一:JOIN + IS NULL 过滤

这种写法用关联查询加空值过滤,效率也不错:

SELECT a.id, a.Name, a.int_value, b.unique_key
FROM A a
INNER JOIN B b ON a.id = b.id  -- 先确保A的行在B中有对应(满足unique_key存在于B的要求)
LEFT JOIN C c ON b.unique_key = c.unique_key
WHERE c.unique_key IS NULL;  -- 过滤掉那些在C中存在的unique_key

写法二:NOT EXISTS 子查询

这种方式逻辑更直观,读起来一目了然,适合复杂条件的场景:

SELECT a.id, a.Name, a.int_value, b.unique_key
FROM A a
INNER JOIN B b ON a.id = b.id
WHERE NOT EXISTS (
    -- 检查当前B的unique_key是否在C中存在,不存在就保留该行
    SELECT 1 
    FROM C c 
    WHERE c.unique_key = b.unique_key
);

验证结果

这两种写法都会精准返回你想要的结果:

idNameint_valueunique_key
a3cc5u5

因为u5在表B里有,但表C里完全找不到这个unique_key,完美符合你的需求。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.05.08 14:03:13