!=

时间:2016-08-05 01:10:00

标签: sql postgresql

我在这里看到一个帖子: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

2 个答案:

答案 0 :(得分:6)

Postgres提供is distinct from运营商。你可以这样做:

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

这符合您对NULL值的期望。

documentation中解释了此运算符。

答案 1 :(得分:3)

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

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

戈登的回答指出IS DISTINCT FROM一种非sql标准的说法。请注意,PostgreSQL可能无法有效地为IS DISTINCT FROM使用索引,因此我倾向于仅在比较标量的触发器中使用它,并在其余时间使用col <> 'something' OR col IS NULL