SQL: лучший способ написать условие, которое проверяет значение переменной, когда переменная может быть нулевой - PullRequest
2 голосов
/ 15 февраля 2012

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

SELECT * FROM table WHERE column = var

, что в случае NULL-переменной становится

SELECT * FROM table WHERE column = NULL

Таким образом, запрос завершается неудачно с NULL, потому что, как и Документация PostgreSQL говорит:

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

Я разрешил его с помощью CASEутверждение:

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

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

Ответы [ 2 ]

5 голосов
/ 15 февраля 2012
SELECT * FROM table WHERE column IS NOT DISTINCT FROM var
1 голос
/ 15 февраля 2012

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

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

SELECT * FROM table WHERE 
(var IS NULL AND column = column) OR column = var
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...