我需要找到表 A 中所有行的 ID,而表 B 上没有匹配的行。按照这个问题的答案,我使用这样的左连接:
select A.id from A left join B on B.id_A = A.id where B.id_A is null;
它工作得很好。但是现在我需要使用附加条件进行相同的查询以进行匹配,这意味着我需要找到表 A 中所有行的 ID,而表 B 上没有匹配行,其列 c 的值为 x。如果我尝试类似的东西:
select A.id from A left join B on B.id_A = A.id where B.id_A is null and B.c = x;
它显然给了我一个空的结果集。
到目前为止,我想做到这一点的唯一方法是使用带有“不存在”子句的 B 子查询:
select A.id from A where not exists (select id from B where B.id_A = A.id and B.c = x);
关于如何在不使用子查询的情况下通过连接执行此操作的任何想法?
将 Bc 的测试移入连接条件并移出 where 子句会导致它仅用于从左连接的考虑中消除不匹配的 B 行,而不是从结果中消除行。