2012-02-15 2 views
2

Я пишу функцию pgplsql, в которой у меня есть переменная var, которая может быть NULL или оценена. В более позднем запросе я:SQL: Лучший способ написать условие, которое проверяет значение переменной, когда переменная может быть нулевой

SELECT * FROM table WHERE column = var 

, что в случае NULL вар, становится

SELECT * FROM table WHERE column = NULL 

Таким образом, запрос терпит неудачу с NULL, потому что, как PostgreSQL documentation говорит,

Нулевое значение представляет неизвестное значение, и неизвестно, равны ли два неизвестных значения:

я решил его с CASE заявлением:

SELECT * FROM table WHERE 
(CASE WHEN var IS NULL THEN column IS NULL ELSE column = var END) = TRUE 

Но я не уверен, погода это лучший способ решить вопрос ... у вас есть хорошая альтернатива?

ответ

5
SELECT * FROM table WHERE column IS NOT DISTINCT FROM var 
+0

Это также написано на документах! Виноват! – mdesantis

1

Если var имеет значение NULL, вы действительно хотите только выбрать записи, имеющие значение столбца NULL? Или вы хотите рассматривать его как «выбрать все»/«не ограничивать»?

Если последнее применимо, тогда такой подход будет работать. (Это псевдокод, поскольку я являюсь родным для MSSQL.)

SELECT * FROM table WHERE 
(var IS NULL AND column = column) OR column = var 
+0

'var' не имеет значения' NULL', 'var' МОЖЕТ иметь (или не) значение' NULL' :) Во всяком случае ваше решение верно, поэтому +1. Спасибо! – mdesantis