У меня есть столбец 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. Здесь мы не сравниваем значение с символом. Может кто-нибудь объяснить, почему это так не работает?
На основании моих тестов и документации здесь: http://dev.mysql.com/doc/refman/5.0/en/comparison-operators.html
Вы можете сравнить null и получите логический результат, используя < =>
. ПРИМЕЧАНИЕ: это выглядит как оператор NOT EQ, но это оператор EQ
Например:
select x <=> y;
or
select @x <=> @y;
Это также сравнивает строку с нулем, строку с строкой и т. д.