Подтвердить что ты не робот

Сравнение 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. Здесь мы не сравниваем значение с персонажем. Может кто-то бросить какой-то свет, почему он не работает таким образом?

4b9b3361

Ответ 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;