SQL左连接只返回一行而不是很多
问题描述:
我有两个表格,一个是城市(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%'
答
添加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, ....
这工作,但我不明白我做错了什么。你能花一些时间来解释吗?非常感谢 – SimeriaIonut
@SimeriaIonut [聚合函数](https://msdn.microsoft.com/zh-CN/library/ms173454.aspx)执行计算并单独返回单个值,如果要将剩余的列返回到您需要的值添加GROUP BY。所以你在SELECT中提到的列需要包含在GROUP BY中,除了聚合列名 – Arulkumar