我有两个表包含艺术家(Artist)和国家(Country),我正在尝试将这两个表连接起来,我想显示有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"

最佳答案

改为使用COUNT(a.FK_countryID)。这只计算非空项,而COUNT(*)计算行,不管列是否为空。
COUNT(a.FK_countryID)将产生该国艺术家的确切数量,包括0。
由于您使用的是左联接,因此当没有匹配的艺术家时,查询将返回一行,该行的国家名称为fk_countryid,但条目为空。

09-27 14:02