2016-05-29 51 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