我必须表A和B。 这种关系是一对多的。 在表B中有来自A的外键。
TABLE A:
... fields
TABLE B:
f = foreignkey(A)
如何获得所有没有B的A?
下面的查询不起作用。
select TABLE_A.id, COUNT(TABLE_B.f)
from TABLE_A JOIN TABLE_B
ON (TABLE_A.id = TABLE_B.f)
GROUP BY TABLE_A.id HAVING COUNT(TABLE_B.f) = 0;
答案 0 :(得分:3)
将JOIN
更改为LEFT JOIN
:
TABLE_A.id, COUNT(TABLE_B.f)
from TABLE_A
LEFT JOIN TABLE_B ON (TABLE_A.id = TABLE_B.f)
GROUP BY TABLE_A.id
HAVING COUNT(TABLE_B.f) = 0;
答案 1 :(得分:1)
使用not exists
吗?
select a.*
from table_a a
where not exists (select 1
from table_b b
where a.id = b.f
);
或not in
。或left join
与where
。
答案 2 :(得分:0)
您可以执行LEFT JOIN
并仅接受列NULL
中具有TABLE_B.f
的行,
表示没有TABLE_B.f
与TABLE_A.id
相匹配:
SELECT TABLE_A.id
FROM TABLE_A LEFT JOIN TABLE_B
ON TABLE_A.id = TABLE_B.f
WHERE TABLE_B.f IS NULL;
假设TABLE_A.id
在TABLE_A
中是唯一的,
否则使用
SELECT DISTINCT TABLE_A.id
答案 3 :(得分:0)
您可以使用左联接并检查右表的空值。
SELECT TABLE_A.id,count(*)
FROM TABLE_A LEFT JOIN TABLE_B
ON TABLE_A.id = TABLE_B.f
WHERE TABLE_B.f IS NULL
group by TABLE_A.id;