【问题标题】:Postgres not returning rows where value is NULL when !=当 != 时 Postgres 不返回值为 NULL 的行
【发布时间】:2016-12-11 07:18:14
【问题描述】:

我在这里看到一个帖子:Why does PostgreSQL not return null values when the condition is <> true 的答案解释了为什么会发生这种情况,但我仍然不确定如何解决。

我正在运行与此类似的查询:

SELECT * FROM beers WHERE name != 'Budlight';

我希望它返回 name 不等于 Budlight 的行。结果应包括名称为NULL 的行。相反,我的结果显示name 不是BudlightNULL 的行。

我怎样才能形成只有名称不是Budlight 的行从结果中被省略的查询?

SQLFiddle:http://www.sqlfiddle.com/#!15/7b9bd/1

【问题讨论】:

    标签: sql postgresql


    【解决方案1】:

    Postgres 提供is distinct from 运算符。你可以这样做:

    SELECT *
    FROM beers
    WHERE name IS DISTINCT FROM 'Budlight';
    

    这可以满足您对 NULL 值的期望。

    这个操作符在documentation中有解释。

    【讨论】:

      【解决方案2】:

      SQL 标准的方式就是说OR col IS NULL,例如

      SELECT * FROM beers WHERE name <> 'Budlight' OR name IS NULL;
      

      Gordon 的回答指出了IS DISTINCT FROM 一种非 sql 标准的说法。请注意,PostgreSQL 可能无法有效地为IS DISTINCT FROM 使用索引,所以我倾向于只在比较标量的触发器中使用它,而在其余时间使用col &lt;&gt; 'something' OR col IS NULL

      【讨论】:

        猜你喜欢
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 2013-09-27
        • 1970-01-01
        • 1970-01-01
        • 2021-05-11
        • 1970-01-01
        • 2016-12-28
        相关资源
        最近更新 更多