Почему результирующий набор является ПУСТОЙ, если внутренний запрос NOT IN содержит значение NULL? - PullRequest
0 голосов
/ 05 декабря 2018

Это моя таблица mysql с именем samp

+--------+--------+
| name   | roleid |
+--------+--------+
| alki   |      2 |
| karthi |      3 |
| aadhil |      2 |
| pri    |      2 |
| pri    |      2 |
+--------+--------+

, когда я использовал запрос вроде select name from samp where name not in ('alki','pri',NULL)

Я ожидал, что результат будет,

+--------+
| name   |
+--------+
| karthi |
| aadhil |
+--------+

Но мой результат Empty set.У меня есть альтернатива для этого.Но мне нужно знать причину этого.

Ответы [ 4 ]

0 голосов
/ 05 декабря 2018

Вы можете просто сделать:

select name
from samp
where name not in ('alki', 'pri');

NULL терпит неудачу not in, как и большинство других сравнений.

Если вы явно хотели включить NULL, вынужно будет включить его как:

select name
from samp
where name not in ('alki', 'pri') or name is null;
0 голосов
/ 05 декабря 2018

Вот как NULL должен вести себя.Это не сравнить ни с чем по дизайну.Ваш запрос интерпретируется как:

select name
from samp
where name <> 'alki'
and name <> 'pri'
and name <> NULL

Так как name ни равно не равно "не" равно NULL условие не выполнено.

0 голосов
/ 05 декабря 2018

NULL означает, что неизвестно, что это не значение, вам нужно использовать not null вместо использования в NULL

Вы можете попробовать это.

select name from samp where name not in ('alki','pri') and name is not null
0 голосов
/ 05 декабря 2018

Вы можете попробовать ниже

select name from samp where name not in ('alki','pri') and name is not null
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...