MySQL сравнение с нулевым значением - PullRequest
27 голосов
/ 08 марта 2012

У меня есть столбец с именем CODE в таблице MySQL, который может быть NULL. Скажем, у меня есть несколько строк с CODE = 'C', которые я хочу игнорировать в моем наборе результатов выбора. В моем наборе результатов может быть либо CODE = NULL, либо CODE! = 'C'.

Следующий запрос не возвращает строку с CODE как NULL:

SELECT * from TABLE where CODE!='C'

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

SELECT * from TABLE where CODE IS NULL OR CODE!='C'

Мой вопрос: почему наличие только CODE! = 'C' не возвращает строки, где CODE = NULL? Определенно 'C' не NULL. Мы не сравниваем никакой ценности с персонажем здесь. Может ли кто-нибудь пролить свет на то, почему это так не работает?

Ответы [ 5 ]

42 голосов
/ 08 марта 2012

В MySQL NULL считается «отсутствующим неизвестным значением», а не значением.Взгляните на эту ссылку MySQL на NULL .

Любое арифметическое сравнение с NULL не возвращает true или false, но вместо этого возвращает NULL. Таким образом, NULL != 'C' возвращает NULL, а не возвращает true.

Любое арифметическое сравнение с NULL вернет false.Чтобы проверить это в SQL:

SELECT IF(NULL=123,'true','false') 

Для проверки NULL значений нам нужно использовать оператор IS NULL & IS NOT NULL.

29 голосов
/ 23 октября 2013

На основании моих тестов и документации здесь: http://dev.mysql.com/doc/refman/5.0/en/comparison-operators.html

Вы можете сравнить ноль и получить логический результат, используя <=>
ПРИМЕЧАНИЕ: это выглядит как НЕ оператор EQ, но это оператор EQ

Например:

select x <=> y; 
or
select @x <=> @y;

Здесь также сравниваются строка с нулем, строка против строки и т. Д.

12 голосов
/ 08 марта 2012

В SQL значение NULL является специальным значением, не сопоставимым ни с одним другим.Результат прямого сравнения со значением всегда либо FALSE, либо NULL, в зависимости от реализации.

Для проверки нулевого значения следует использовать IS NULL и IS NOT NULL.

6 голосов
/ 01 октября 2012
SELECT * 
FROM `table_name` 
WHERE IFNULL(`column_name` != 'C', TRUE)
2 голосов
/ 17 января 2017

выберите * от пользователя, где application_id = '1223333344' и имя равно нулю;

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