带有count的左外连接,3个表没有返回左表

时间:2017-05-16 22:06:43

标签: sql left-join

我有这3张桌子:

Areas - id, name
Persons - id, area_id
Special_Persons - id_person, date

我想制作所有区域的列表,然后是每个区域的特殊人数,包括没有特殊人员的区域。

如果我左右连接区域和人员,就像这样:

select a.id as idArea, count(p.id) as count 
from areas a 
left join persons p on p.area_id = a.id
group by a.id;

这很好用;没有人的区域出现,并且计数为0。

我不清楚的是如何使用special_persons表做同样的事情,该表目前只有2个条目,都在同一个区域内。

我尝试了以下内容:

select a.id as idArea, count(sp.id_person) as count
from special_persons sp, areas a
left join persons p on p.area_id = a.id 
where p.area_id = a.id 
and sp.id_person = p.id 
group by a.id;

它只返回1行,其中区域恰好有2个特殊人物,并且计数为2。

要继续获取所有区域的列表,是否需要使用子查询?另一个加入?我不确定该怎么做。

1 个答案:

答案 0 :(得分:1)

您可以向Special_Persons表添加另一个左连接:

select a.id as idArea, count(p.id), count(sp.id_person) 
from areas a 
left join persons p on p.area_id = a.id
left join special_persons sp on sp.id_person = p.id
group by a.id;