查询对空值给出1

时间:2019-02-11 16:57:19

标签: database sqlite

我有两个包含艺术家(艺术家)和国家(国家)的表,我试图将这两个表合并,我想显示具有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"

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留为第二列,但这不是必需的。