我有两张桌子: 表 A ID ABC_ID 价值 表 B ID ABC_ID 价值 这两个表通过 ABC_ID 列直接相互关联。 我想在表 A 中找到所有 VAL 列值,这些值在表 B 中对于相同的 ABC_ID 不 存在。 原文由 Fazal 发布,翻译遵循 CC BY-SA 4.0 许可协议
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 许可协议
或者
或者
请注意,这些查询根本不需要 ABC_ID 在表 B 中。我认为这就是你想要的。