我有一张有 1118 条记录的表。在这些记录中,有一个字段flag
默认为 NULL。其中 556 条记录的字段flag
标记为 true,而其余记录为 NULL。当我运行以下查询时:
select count(*) from table_name where flag!='true'
我得到的结果为 0。实际结果应该是 1118-556 即 562。
我究竟做错了什么?
NULL 从不与任何东西比较,甚至不是另一个 NULL
select count(*) from table_name where flag!='true' OR flag IS NULL
或者
select count(*) from table_name where flag IS NULL
这取决于您是否有除true
( false
?) 以及 NULL之外的其他值
select
count(CASE WHEN flag = 'true' THEN flag END) AS truecount,
count(CASE WHEN flag = 'false' THEN flag END) AS falsecount
count(*) - count(flag) AS NULLCount
from
table_name
最后,查看这些以了解 COUNT 和 null/not null 值
在查询中,除非明确提及,否则任何布尔表达式都不会匹配 NULL:
SELECT COUNT(*) FROM TABLE_NAME WHERE flag IS NULL