Postgres中的布尔类型无法按预期工作

时间:2018-03-28 08:03:30

标签: postgresql boolean

我使用的是Ubuntu 16.04和psql(PostgreSQL)9.4.14。

我刚遇到一个非常奇怪的案子。 boolean的三个状态的总和不等于整个计数。

enter image description here

这是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

令人惊讶地恼火。

请分享一些建议,谢谢!

1 个答案:

答案 0 :(得分:4)

您需要使用IS NULL将列与NULL进行比较:

select count(*) from info_security_group where deleted is null;

我的猜测是,这将返回8600的计数。