代码之家  ›  专栏  ›  技术社区  ›  kapso

SQL查询左联接问题(MySQL)

  •  0
  • kapso  · 技术社区  · 16 年前

    我有2张桌子。

    SCHOOLS (ID,学校名称,城市ID)
    STUDENTS (ID,学生姓名,学校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
    

    但是,由于不建议使用共同相关的查询,因此我希望避免使用-

       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时,这才有效。所以我猜左连接的概念是不起作用的,这意味着如果任何没有学生的学校应该被列为学生人数=0,但这并没有发生。有趣的是-我确实看到了学生计数为0的“一”记录,但就是这样。

    我的左联接查询有什么问题吗??

    2 回复  |  直到 12 年前
        1
  •  2
  •   OMG Ponies    16 年前

    用途:

       SELECT sh.id,
              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 sh.id, sh.school_name
    

    因为使用了左联接,所以引用了 st 如果没有与学校相关联的学生,则为空。Count不计算空值,因此如果没有关联的学生,则 student_count 将为零。

        2
  •  0
  •   keithwill    16 年前

    尝试按sh.id分组,而不是按st.school-id分组