在我的数据库表中,我有一个布尔列.其中有一些事务将是False,True和Null.
这些是我尝试过的案例:
情况1
select * from table_name where
boolean_column is null;
Run Code Online (Sandbox Code Playgroud)
效果很好.给出具有该列的空值的所有事务的结果.
案例:2
select *from table_name where boolean_column = False;
Run Code Online (Sandbox Code Playgroud)
效果很好.给出该列的所有事务都具有False值的结果.
案例:3这是不起作用的要求.我希望所有事务的值都为False和Null.
我试过这些.
一世) 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值的记录.*
三) select *from table_name where boolean_column is Null or boolean_column = False;
这只是显示所有事务都没有应用任何条件.
如何解决此问题.任何指导赞赏.
提前致谢.
Rgds,Anil.
Bra*_*Dre 40
PG中的布尔值有3种状态:true,false和unknown(null).这里解释:Postgres布尔数据类型
因此,您只需查询NOT TRUE:
SELECT * from table_name WHERE boolean_column IS NOT TRUE;
Run Code Online (Sandbox Code Playgroud)
Tim*_*sen 38
我对Postgres的内部工作方式不够专业,不知道为什么你的查询在WHERE子句中的双重条件不起作用.但解决这个问题的一种方法是使用UNION你知道可以工作的两个查询中的一个:
SELECT * FROM table_name WHERE boolean_column IS NULL
UNION
SELECT * FROM table_name WHERE boolean_column = FALSE
Run Code Online (Sandbox Code Playgroud)
您也可以尝试使用COALESCE:
SELECT * FROM table_name WHERE COALESCE(boolean_column, FALSE) = FALSE
Run Code Online (Sandbox Code Playgroud)
第二个查询将替换所有NULL值,FALSE然后FALSE在WHERE条件中进行比较.
恢复此选项以发布该选项,该选项自Postgres 8DISTINCT FROM以来就已存在。该方法类似于 Brad Dre 的答案。在你的情况下,你的选择会是这样的
SELECT *
FROM table_name
WHERE boolean_column IS DISTINCT FROM TRUE
Run Code Online (Sandbox Code Playgroud)
在PostgreSQL上,您可以使用:
SELECT * FROM table_name WHERE (boolean_column IS NULL OR NOT boolean_column)
Run Code Online (Sandbox Code Playgroud)
select *from table_name where boolean_column is False or Null;
被解释为“( boolean_column is False ) or (null)”。
它仅返回boolean_column为 False 的行,因为第二个条件始终为假。
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。
我刚刚创建了表格来确认。您可能在某处打错了字。