SQL-запрос - как фильтровать по нулю или не по нулю - PullRequest
29 голосов
/ 28 марта 2011

Я хочу отфильтровать запись ....

Если statusid имеет значение null, отфильтровать запись (где statusId не равен NULL)

Если statusid не равно NULL, отфильтровать запись, гдеstatusid равен указанному statusid.

Как мне это сделать?

Ответы [ 6 ]

52 голосов
/ 28 марта 2011

Так же, как вы сказали

select * from tbl where statusid is null

или

select * from tbl where statusid is not null

Если ваш statusid не нулевой, то он будет выбран просто отлично, когда у вас есть фактическое значение, не нужно никакой логики «если», если вы об этом думаете

select * from tbl where statusid = 123 -- the record(s) returned will not have null statusid

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

select * from tbl where statusid = 123 or statusid is null
3 голосов
/ 28 марта 2011

Как насчет statusid = statusid. Нуль никогда не равен нулю.

2 голосов
/ 28 марта 2011
WHERE something IS NULL

и

WHERE something IS NOT NULL
1 голос
/ 11 апреля 2011

отключить ansi_nulls идти выбрать * из таблицы т внутреннее объединение otherTable o на t.statusid = o.statusid идти установить ansi_nulls на идти

0 голосов
/ 05 января 2016

Везде, где вы пытаетесь проверить значение NULL столбца, вы должны использовать

IS NULL и NOT NULL

Вы должны не использовать = NULL или == NULL


Пример (NULL)

select * from user_registration where registered_time IS NULL 

вернет строки со значением registered_time NULL


Пример (НЕ ПУСТО)

select * from user_registration where registered_time IS NOT NULL 

вернет строки со значением registered_time NOT NULL

Примечание: Ключевыми словами null, not null и is являются not case sensitive.

0 голосов
/ 28 марта 2011

Я думаю, что это может сработать:

select * from tbl where statusid = isnull(@statusid,statusid)
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...