database - 查询对空值给出 1

标签 database sqlite

我有两个包含艺术家(艺术家)和国家/地区(国家/地区)的表,我正在尝试连接这两个表,并且我想显示拥有 0 个艺术家的国家/地区(根本不在艺术家表中的国家/地区) 。此查询为我提供了所有艺术家,但在具有 0 个艺术家的国家/地区的行中,它给出的是“1”,而不是“0”。我是否需要在某处指定它应该给出的值,以防它为空?

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。

由于您使用的是 LEFT JOIN,因此当没有匹配的艺术家时,您的查询将返回包含国家/地区名称但 FK_countryID 为 NULL 条目的行。

关于database - 查询对空值给出 1,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/54635466/

相关文章:

database - 数据库连接是否总是在 NestJS + TypeORM 中打开?

c# - Entity Framework 无法更改关系,因为一个或多个外键属性不可为空

android - 更新和删除 ListView 中的行

c# - SQLite 查询中的 "Apply joins is not supported"

sql - 从数据库表中选择重复条目

mysql - 数据库设计通告引用/潜在的不一致

java - Android 应用程序 SQLiteDatabase 插入新值不起作用,代码中有 0 个错误

mysql - 在将 CSV 文件内容插入数据库之前检查正确的数据类型

Android,如何为离线应用保留本地加密数据库的 key ?

android - 如何有效地使用 ormlite 在 android sqlite 数据库中插入批量数据