【发布时间】:2010-10-27 20:40:22
【问题描述】:
我有两张桌子
SCHOOLS(ID、SCHOOL_NAME、CITY_ID)STUDENTS(ID、STUDENT_NAME、SCHOOL_ID)。
我想列出特定城市的学校以及学生人数(学校名称|学生人数)
做到这一点的一种方法是拥有共同相关的子查询 -
select sh.school_name,
(select count(*)
from student
where school_id = sh.id) as student_count
from schools sh
where sh.city_id = 1
但由于不建议使用共同相关的查询,我想避免这种情况,我尝试了一个 group by -
select sh.school_name,
count(st.school_id) as student_count
from schools sh
left join students st on sh.id = st.school_id
where sh.city_id = 1
group by st.school_id
现在这仅在学校的学生人数 > 0 时才有效。所以我猜测左连接概念不起作用,这意味着如果任何没有学生的学校应列为 student_count=0,但这并没有发生.有趣的是 - 我确实看到了 student_count = 0 的“一个”记录,但仅此而已。
我的 LEFT JOIN 查询有什么问题吗??
【问题讨论】:
标签: mysql sql null aggregate-functions outer-join