2016-05-29 3 views
1

У меня есть две таблицы, одна с городами (id и название города) и одна с фотографиями городов (city_id и т. Д.).SQL left join возвращает только одну строку вместо многих

Предположим, что я ищу город под названием Сибиу. Это должно вернуть 3 результата, так как в таблице больше таких городов (Miercurea Sibiului, Sibiu, Poiana Sibiului), но оно возвращает только один.

Кроме того, в качестве заметки в timeline_elements нет фотографий города.

SELECT cities_countries.*, COUNT(timeline_elements.city_id) as number_of_photos 
FROM cities_countries 
LEFT JOIN timeline_elements on (cities_countries.id = timeline_elements.city_id) 
WHERE cities_countries.name LIKE '%Sibiu%' 

ответ

1

Добавьте GROUP BY, а также явно указать имена всех столбцов для cities_countries таблицы. Я считаю, что это столбцы таблицы cities_countries. id, city_id, city_name.

Также укажите имя псевдонима для каждой таблицы для лучшей читаемости.

SELECT C.id, C.city_id, C.city_name, .... 
     , COUNT(T.city_id) as number_of_photos 
FROM cities_countries C 
LEFT JOIN timeline_elements T ON C.id = T.city_id 
WHERE C.name LIKE '%Sibiu%' 
GROUP BY C.id, C.city_id, C.city_name, .... 
+0

Это сработало, однако я не понимаю, что я сделал не так. Не могли бы вы потратить некоторое время, чтобы объяснить? Большое спасибо – SimeriaIonut

+0

@SimeriaIonut [Агрегатные функции] (https://msdn.microsoft.com/en-IN/library/ms173454.aspx) выполняют вычисления и возвращают только одно значение, если вы хотите вернуть оставшиеся столбцы, которые вам нужно добавьте GROUP BY. Таким образом, столбцы, упомянутые в SELECT, должны быть включены в GROUP BY, кроме имени агрегатного столбца – Arulkumar

Смежные вопросы