SQL-запрос LEFT JOIN проблема (MySQL) - PullRequest
0 голосов
/ 28 октября 2010

у меня 2 таблицы

SCHOOLS (ID, SCHOOL_NAME, CITY_ID)
STUDENTS (ID, STUDENT_NAME, SCHOOL_ID).

Я хочу перечислить школы в определенном городе вместе с количеством учеников (School Name | Student Count)

Один из способов сделать это - создать связанный подзапрос -

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. Таким образом, я предполагаю, что концепция левого объединения не работает, то есть, если какие-либо школы, в которых нет учеников, должны быть указаны как student_count = 0, но этого не происходит , Интересно то, что я вижу «одну» запись с student_count = 0, но это все.

Что-то не так в моем запросе LEFT JOIN ??

Ответы [ 2 ]

2 голосов
/ 28 октября 2010

Использование:

   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

Из-за использования LEFT JOIN ссылки на st будут иметь значение NULL, если в школе нет учеников.COUNT не учитывает значения NULL, поэтому, если нет связанных учеников, student_count будет равно нулю.

0 голосов
/ 28 октября 2010

Попробуйте сгруппировать по sh.id вместо st.school_id

...