我使用的是Ubuntu 16.04和psql(PostgreSQL)9.4.14。
我刚遇到一个非常奇怪的案子。 boolean
的三个状态的总和不等于整个计数。
这是deleted
字段属性,默认为false。
我试过了:
整个计数:
SELECT count(*) from table; the count -> 9000
未删除的计数:
SELECT count(*) from table where deleted; the count -> 400;
同样:
SELECT count(*) from table where deleted = true; the count -> 400;
删除的计数:
SELECT count(*) from table where not deleted; the count -> 0;
同样:
SELECT count(*) from table where deleted <> true; the count -> 0;
null
案例是:
SELECT count(*) from table where deleted = null; the count -> 0;
我检查了official doc。
PostgreSQL提供标准的SQL类型boolean。布尔类型可以有几种状态:&#34; true&#34;,&#34; false&#34;,以及第三种状态,#34; unknown&#34;,它由SQL空值表示。< / p>
但正如您所看到的,这三个州的最终总和不能是9000
。
令人惊讶地恼火。
请分享一些建议,谢谢!
答案 0 :(得分:4)
您需要使用IS NULL
将列与NULL
进行比较:
select count(*) from info_security_group where deleted is null;
我的猜测是,这将返回8600的计数。