2016-05-29 53 views
1

我有兩個表格,一個是城市(id和城市名稱),另一個是城市圖片(city_id等)。SQL左連接只返回一行而不是很多

假設我正在尋找名爲錫比烏的城市。這應該會返回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/zh-CN/library/ms173454.aspx)執行計算並單獨返回單個值,如果要將剩餘的列返回到您需要的值添加GROUP BY。所以你在SELECT中提到的列需要包含在GROUP BY中,除了聚合列名 – Arulkumar