2017-02-09 1 views
0

У меня возникла проблема с некоторыми SQL-запросами, которые я не могу определить.Не равен <> запрос исключает значения NULL

SELECT * FROM MasterList WHERE Requested <> "Yes"; 

Если я выполняю вышеуказанный запрос на своем столе, я получаю 60 записей. Однако должно быть близко к 300. Я думаю, проблема в том, что некоторые из записей просто пусты в поле Requested, а другие - NULL. Но я бы подумал, что NULL все равно будет считаться не равным «Да», не так ли? Если нет, есть ли способ обойти это без необходимости возвращаться и «пустить» все нулевые поля?

ответ

0

Нули не учитываются в сравнении, если вы хотите null значения должны быть возвращены, то вам необходимо выполнить следующий запрос:

SELECT * FROM MasterList WHERE Requested <> "Yes" OR Requested IS NULL; 
+0

Спасибо за это. Я могу строить свои запросы таким образом, чтобы они учитывали NULL. –

0

Это происходит потому, что null <> 'Yes' выражения для null, таким образом, вы должны добавить отдельную is null проверки включать записи, которые удовлетворяют это условие в результирующем наборе:

select * from MasterList where Requested <> "Yes" or Requested is null 

PS: сравнение null ни с чем, даже с null сам, всегда возвращает null.

2

<=>
NULL-сейф равны. Этот оператор выполняет сравнение равенства, как оператор =, но возвращает 1, а не NULL, если оба операнда NULL, а 0, а не NULL, если один операнд равен NULL.

mysql> SELECT 1 <=> 1, NULL <=> NULL, 1 <=> NULL; 
    -> 1, 1, 0 
mysql> SELECT 1 = 1, NULL = NULL, 1 = NULL; 
    -> 1, NULL, NULL 

в вашем использовании случай:

SELECT * FROM MasterList WHERE not Requested <=> "Yes" 
Смежные вопросы