2016-08-05 3 views
1

Я вижу тему здесь: Why does PostgreSQL not return null values when the condition is <> true с ответами, объясняющими почему это происходит, но я все еще не уверен, как это исправить.Postgres не возвращает строки, где значение равно NULL, когда! =

Я бегу запрос похожее на это:

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

я ожидаю, что возвращать строки, где name не равна Budlight. Результаты должны содержать строки, в которых имя равно NULL. Вместо этого мои результаты показывают строки, где name не Budlight или NULL.

Как я могу сформировать запрос, в котором исключены только те строки, где нет имени Budlight?

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

ответ

5

Postgres предлагает оператору is distinct from. Вы можете сделать:

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

Это делает то, что вы ожидаете с NULL значений.

Этот оператор объясняется в documentation.

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.

Смежные вопросы