我有这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。
要继续获取所有区域的列表,是否需要使用子查询?另一个加入?我不确定该怎么做。
答案 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;