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

如何编写SQL查询获取表A全量值与表B未匹配值组合结果?

解决方法

首先,我们需要生成所有A1与B1的可能组合,再排除掉那些在表A中已经匹配(即A2对应B.Id)的组合。这里用NOT EXISTS比NOT IN更可靠,因为NOT IN在遇到NULL值时会出现预期外的结果(比如你表A中A1=7对应的A2是NULL,用NOT IN会导致没有返回值)。

最终的SQL语句如下:

SELECT DISTINCT a.A1 AS R1, b.B1 AS R2
FROM A a
CROSS JOIN B b
WHERE NOT EXISTS (
    SELECT 1
    FROM A a_sub
    WHERE a_sub.A1 = a.A1
      AND a_sub.A2 = b.Id
)
ORDER BY R1, R2;

分步解释:

  • CROSS JOIN:将表A中的每个A1值与表B的所有记录进行组合,得到所有可能的(R1, R2)候选对。
  • NOT EXISTS子查询:检查当前(A1, B.Id)组合是否在表A中存在匹配的(A1, A2)记录——如果不存在,就保留这个组合。这完美处理了A2为NULL的情况(因为NULL与任何值比较都不成立,所以所有B记录都会被保留)。
  • DISTINCT:由于表A中可能存在重复的A1值(比如A1=5出现了两次),交叉连接后会产生重复的结果行,用DISTINCT去重。
  • ORDER BY:让输出结果与你期望的顺序一致。

验证结果:

  • 对于A1=5:排除B.Id=2和3的记录,得到5 | 1、5 | 9
  • 对于A1=6:排除B.Id=9的记录,得到6 | 1、6 | 2、6 | 3
  • 对于A1=7:因为A2是NULL,没有匹配的B.Id,所以保留所有B记录,得到7 | 1、7 | 2、7 | 3、7 | 9

完全符合你想要的输出结果。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.05.25 06:20:43