SQL 查询以查找两个相关表之间的缺失行

新手上路,请多包涵

我有两张桌子:

表 A

  • ID
  • ABC_ID
  • 价值

表 B

  • ID
  • ABC_ID
  • 价值

这两个表通过 ABC_ID 列直接相互关联。

我想在表 A 中找到所有 VAL 列值,这些值在表 B 中对于相同的 ABC_ID 存在。

原文由 Fazal 发布,翻译遵循 CC BY-SA 4.0 许可协议

阅读 548
2 个回答
SELECT A.ABC_ID, A.VAL FROM A WHERE NOT EXISTS
   (SELECT * FROM B WHERE B.ABC_ID = A.ABC_ID AND B.VAL = A.VAL)

或者

SELECT A.ABC_ID, A.VAL FROM A WHERE VAL NOT IN
    (SELECT VAL FROM B WHERE B.ABC_ID = A.ABC_ID)

或者

SELECT A.ABC_ID, A.VAL LEFT OUTER JOIN B
    ON A.ABC_ID = B.ABC_ID AND A.VAL = B.VAL FROM A WHERE B.VAL IS NULL

请注意,这些查询根本不需要 ABC_ID 在表 B 中。我认为这就是你想要的。

原文由 Larry Lustig 发布,翻译遵循 CC BY-SA 4.0 许可协议

另一种基于 JOIN 的解决方案。

Join 使用链接组合表 A 和表 B 中的内容,即请求的 ON 部分。

 SELECT
    *
FROM
    A
INNER JOIN
    B
ON
    B.ABC_ID = A.ABC_ID
WHERE
    B.VAL <> A.VAL

基本上,我们在 ABC_ID 上将表 A 与表 B 组合在一起,然后检查 A.VAL 不等于 B.VAL 的位置。使用 INNER JOIN 连接的数据仅包含表 A 和 B 都存在 ABC_ID () 的记录。

原文由 8ctopus 发布,翻译遵循 CC BY-SA 4.0 许可协议

撰写回答
你尚未登录,登录后可以
  • 和开发者交流问题的细节
  • 关注并接收问题和回答的更新提醒
  • 参与内容的编辑和改进,让解决方法与时俱进
logo
Stack Overflow 翻译
子站问答
访问
宣传栏