【问题标题】:Postgresql SQL: How check boolean field with null and True,False Value?Postgresql SQL:如何检查具有 null 和 True、False 值的布尔字段?
【发布时间】:2026-01-10 23:20:03
【问题描述】:

在我的数据库表中,我有一个布尔列。与 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, 阿尼尔。

【问题讨论】:

    标签: postgresql-9.1


    【解决方案1】:

    我在 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
    

    第二个查询将用FALSE 替换所有NULL 值,然后在WHERE 条件下与FALSE 进行比较。

    【讨论】:

    • 我的查询不是单行。我有 20 多个条件查询大约 1 页。我必须再次重复相同的查询吗?
    【解决方案2】:

    在 PostgreSQL 上你可以使用:

    SELECT * FROM table_name WHERE (boolean_column IS NULL OR NOT boolean_column)
    

    【讨论】:

      【解决方案3】:
      1. select *from table_name where boolean_column is False or Null;

        被解释为“(boolean_column is False)或(null)”。

        它只返回boolean_column 为假的行,因为第二个条件始终为假。

      2. select *from table_name where boolean_column is Null or False;

        同样的原因。解释为“(boolean_column is Null) or (False)”

      3. select *from table_name where boolean_column is Null or boolean_column = False;

        此行有效,返回 2 行:falsenull

      我刚刚创建了表格来确认。你可能在某个地方打错了字。

      【讨论】:

        【解决方案4】:

        PG 中的布尔值有 3 种状态:真、假和未知(空)。在这里解释:Postgres boolean datatype

        因此您只需要查询 NOT TRUE:

        SELECT * from table_name WHERE boolean_column IS NOT TRUE;
        

        【讨论】:

        • 这是 imo 的最佳答案
        【解决方案5】:

        重新发布此选项以发布 DISTINCT FROM 选项,该选项自 Postgres 8 以来一直存在。该方法类似于 Brad Dre 的回答。在您的情况下,您的选择将类似于

        SELECT *
          FROM table_name
         WHERE boolean_column IS DISTINCT FROM TRUE
        

        【讨论】: