Сравнение MySQL со значением null
у меня есть столбец, называемый кодом в таблице MySQL, который может быть NULL. Скажем, у меня есть несколько строк с кодом='C', которые я хочу игнорировать в моем наборе результатов select. У меня может быть либо CODE=NULL, либо CODE!='C' в моем результирующем наборе.
следующий запрос не возвращает строку с кодом как NULL:
SELECT * from TABLE where CODE!='C'
но этот запрос работает, как ожидалось, и я знаю, что это правильный способ сделать это.
SELECT * from TABLE where CODE IS NULL OR CODE!='C'
мой вопрос в том, почему имеет только код!='C' не возвращает строки, где КОД=NULL? Определенно "C"не является нулевым. Мы не сравниваем ценность с характером. Может кто-нибудь пролить свет на то, почему это не работает?
5 ответов
В MySQL, NULL
рассматривается как "отсутствующее, неизвестное значение", в отличие от no value. Взгляните при этой ссылке 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
оператора.
на основе моих тестов и документации здесь: http://dev.mysql.com/doc/refman/5.0/en/comparison-operators.html
вы можете сравнить null и получить логический результат, используя
например:
select x <=> y;
or
select @x <=> @y;
Это также сравнивает string vs null, string vs string и т. д.
в SQL значение NULL является специальным значением, не сопоставимым с любым другим. Результат прямого сравнения со значением всегда либо FALSE, либо NULL, в зависимости от реализации.
чтобы проверить значение null, вы должны использовать IS NULL
и IS NOT NULL
.