如何运行以下查询?

时间:2019-02-03 12:28:47

标签: sql postgresql

我必须表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; 

4 个答案:

答案 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 joinwhere

答案 2 :(得分:0)

您可以执行LEFT JOIN并仅接受列NULL中具有TABLE_B.f的行,
表示没有TABLE_B.fTABLE_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.idTABLE_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;