0

我有一张有 1118 条记录的表。在这些记录中,有一个字段flag默认为 NULL。其中 556 条记录的字段flag标记为 true,而其余记录为 NULL。当我运行以下查询时:

select count(*) from table_name where flag!='true'

我得到的结果为 0。实际结果应该是 1118-556 即 562。

我究竟做错了什么?

4

2 回答 2

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 值

于 2012-04-20T10:04:12.803 回答
0

在查询中,除非明确提及,否则任何布尔表达式都不会匹配 NULL:

SELECT COUNT(*) FROM TABLE_NAME WHERE flag IS NULL
于 2012-04-20T10:04:22.307 回答