В чем разница между NOT EXIST и NOT IN? - PullRequest
0 голосов
/ 21 марта 2019

специально как бы я выбрать, какой использовать при работе со значениями NULL?

1 Ответ

1 голос
/ 21 марта 2019

Вы всегда должны использовать not exists с подзапросами. Он обрабатывает NULL значения интуитивно понятным способом.

Если у вас есть:

where t.id not in (select x.id from x)

И x.id равно когда-либо NULL, тогда никаких строк не возвращаются вообще. Это из-за определения NULL значений.

Эквивалентная формулировка:

where not exists (select 1 from x where x.id = t.id)

ведет себя так, как вы ожидаете.

Еще одним преимуществом not exists является то, что вы можете обрабатывать несколько столбцов одновременно:

where not exists (select 1 from x where x.id = t.id and x.date = t.date)

Некоторые базы данных поддерживают кортежи, что позволяет вам выражать это как not in, но не все делают.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...