2015-10-28 2 views
-1

Когда я использовать операторНеправильный результат MySQL

select Name, Id 
from employee 
where Id in (1234,1234,NULL); 

Я получаю правильный результат. Однако, когда я пишу запрос

select Name, Id 
from employee 
where Id not in (1234,5678,NULL); 

Я просто получаю «пустой набор» в качестве результата. Пожалуйста, скажите мне, почему это происходит. Я использую MYSQL.

ответ

1

По сравнению с null Результаты неизвестен. Вы должны использовать оператор IS с null

select Name, Id 
from employee 
where Id not in (1234,3456) 
and Id is not null 
0

Как другие говорили, сравнивая ничего с NULL вычисляет UNKNOWN (третье логическое состояние помимо TRUE и FALSE Чтобы расширить свои два выражения:.

  1. Id in (1234,1234,NULL) =>Id = 1234 or Id = 1234 or Id = NULL =>Id = 1234 or Id = 1234 or UNKNOWN

    TRUE or <anything> вычисляет TRUE, так что если Id = 1234 возвращает TRUE, весь expresison является TRUE

  2. Id not in (1234,5678,NULL) =>Id != 1234 and Id != 5678 and Id != NULL =>Id != 1234 and Id != 5678 and UNKNOWN

    <anything> and UNKNOWN вычисляет UNKNOWN, поэтому для каких-либо строк будет выполнено условие вычисляться TRUE, таким образом, нет строк

Смежные вопросы