我有两个包含艺术家(艺术家)和国家(国家)的表,我试图将这两个表合并,我想显示具有0个艺术家的国家(艺术家表中根本没有的国家) 。该查询为我提供了所有艺术家,但在具有0个艺术家的国家/地区中,该行不是“ 0”,而是给出“ 1”。我是否需要在某个地方指定它以防万一,它应该提供什么值?
SELECT c.country_name AS shteti, COUNT(*) AS count
FROM country c
left outer join artist a
ON c.countryID = a.FK_countryID
GROUP BY c.country_name
so it gives Andorra 1, even though Andorra is not at all in the Artist
table.
"Albania" "5"
"Andorra" "1"
"Argentina" "2"
答案 0 :(得分:1)
改为使用COUNT(a.FK_countryID)
。这仅计算非空条目,而COUNT(*)
则计算行,无论列是否为空。
COUNT(a.FK_countryID)
将产生该国家/地区的确切艺术家数量,包括0。
由于使用的是LEFT JOIN,因此在没有匹配的艺术家的情况下,查询将返回一行,其中包含国家/地区名称,但FK_countryID的条目为NULL。
答案 1 :(得分:1)
您需要一个left join
,并且仅获得a.FK_countryID IS NULL
SELECT c.country_name AS shteti, 0 AS count
FROM country c
left join artist a
ON c.countryID = a.FK_countryID
WHERE a.FK_countryID IS NULL
这将为您提供艺术家表中未显示的所有国家/地区。
我将0
留为第二列,但这不是必需的。