我有一张包含1118条记录的表格。在这些记录中,有一个字段flag
,默认情况下为NULL。这些记录中的556个字段flag
标记为true,而其余记录为NULL。
当我运行以下查询时:
select count(*) from table_name where flag!='true'
我得到的结果是0.实际结果应该是1118-556,即562。
我做错了什么?
答案 0 :(得分:2)
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值
答案 1 :(得分:0)
在查询中,NULL永远不会被任何布尔表达式匹配,除非明确提到:
SELECT COUNT(*) FROM TABLE_NAME WHERE flag IS NULL