在我的数据库表中,我有一个布尔列。其中有一些交易将是False,True和Null。
以下是我尝试过的案例:
案例:1
select * from table_name where
boolean_column is null;
运作良好。给出具有该列空值的所有事务的结果。
案例:2
select *from table_name where boolean_column = False;
运作良好。给出结果,所有事务的该列都具有False值。
案例:3 这是不起作用的要求。我希望所有事务的值都为False和Null。
我试过这些。
i)select *from table_name where boolean_column is False or Null;
只提供False的结果,它不会显示空记录。
ii)select *from table_name where boolean_column is Null or False;
*仅提供null的结果,它不显示具有False值的记录。 *
iii)select *from table_name where boolean_column is Null or boolean_column = False;
这只是显示所有交易都没有应用任何条件。
如何解决此问题。 任何指导意见。
先谢谢。
RGDS, 阿尼尔。
答案 0 :(得分:34)
我在Postgres的内部工作方面不够专业,无法知道为什么WHERE
子句中带有双重条件的查询无法正常工作。但解决这个问题的一种方法是使用你知道可以工作的两个查询中的UNION
:
SELECT * FROM table_name WHERE boolean_column IS NULL
UNION
SELECT * FROM table_name WHERE boolean_column = FALSE
您也可以尝试使用COALESCE
:
SELECT * FROM table_name WHERE COALESCE(boolean_column, FALSE) = FALSE
第二个查询会将所有NULL
值替换为FALSE
,然后在FALSE
条件下与WHERE
进行比较。
答案 1 :(得分:29)
PG中有3种状态的布尔值:true,false和unknown(null)。在此解释:Postgres boolean datatype
因此,您只需查询NOT TRUE:
SELECT * from table_name WHERE boolean_column IS NOT TRUE;
答案 2 :(得分:7)
在PostgreSQL上你可以使用:
SELECT * FROM table_name WHERE (boolean_column IS NULL OR NOT boolean_column)
答案 3 :(得分:4)
select *from table_name where boolean_column is False or Null;
被解释为"(boolean_column为False)或(null)"。
它只返回boolean_column
为假的行,因为第二个条件总是为假。
select *from table_name where boolean_column is Null or False;
同样的道理。解释为"(boolean_column为Null)或(False)"
select *from table_name where boolean_column is Null or boolean_column = False;
这个有效且返回2行:false
和null
。
我刚创建了表格以确认。你可能在某处打错了。
答案 4 :(得分:1)
重新启用此功能以发布DISTINCT FROM
选项,此选项自Postgres 8起就出现了。该方法类似于Brad Dre的答案。在您的情况下,您的选择将类似于
SELECT *
FROM table_name
WHERE boolean_column IS DISTINCT FROM TRUE