Сравнение MySQL с нулевым значением
У меня есть столбец 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. Здесь мы не сравниваем значение с персонажем. Может кто-то бросить какой-то свет, почему он не работает таким образом?
Ответы
Ответ 1
В MySQL NULL
считается "отсутствующим, неизвестным значением", а не значением. Посмотрите в этом MySQL Reference на NULL.
Любое арифметическое сравнение с NULL
не возвращает true или false, но возвращает NULL
вместо. Таким образом, NULL != 'C'
возвращает NULL
, а не возвращает true.
Любое арифметическое сравнение с "NULL" вернет false. Чтобы проверить это в SQL:
SELECT IF(NULL=123,'true','false')
Чтобы проверить значения NULL
, нам нужно использовать оператор IS NULL
и IS NOT NULL
.
Ответ 2
Основываясь на моих тестах и документации здесь: http://dev.mysql.com/doc/refman/5.0/en/comparison-operators.html
Вы можете сравнить null и получить логический результат, используя & lt; =>
ПРИМЕЧАНИЕ: это похоже на оператор НЕ EQ, но это оператор EQ
Например:
select x <=> y;
or
select @x <=> @y;
Здесь также сравниваются строка с нулем, строка с строкой и т.д.
Ответ 3
В SQL значение NULL является специальным значением, не сопоставимым ни с одним другим.
Результат прямого сравнения с NULL всегда равен NULL, хотя (к сожалению) вы можете найти FALSE в некоторых реализациях.
Чтобы проверить нулевое значение, вы должны использовать IS NULL
и IS NOT NULL
.
Ответ 4
SELECT *
FROM `table_name`
WHERE IFNULL(`column_name` != 'C', TRUE)
Ответ 5
выберите * от пользователя, где application_id = '1223333344' и имя равно null;