MySQL - NULL безопасный НЕ равный оператор
Мне просто интересно. Я знаю о NULL безопасном равном операторе <= > , но есть ли какой-то NULL безопасный НЕ равный оператор, или я должен всегда использовать что-то вроде этого:
(tab.id != 1 OR tab.id IS NULL)
или кто-то предпочитает
!(tab.id <=> 1)
Ответы
Ответ 1
COALESCE(tab.id, 0) != 1
Можно использовать здесь, если вам это нравится. Я просматриваю параметры и возвращает первое значение, которое не является NULL
. В этом случае, если он NULL
, он будет сравнивать 0 != 1
. Хотя он может использовать больше знаков, ему все же проще управлять, а не быть вынужденным всегда иметь противоположные "логические значения" в качестве решения в этих случаях.
Прочитайте документацию для COALESCE()
Ответ 2
Я обнаружил, что NOT (NULL <= > 1) работает, и я думаю, что он также соответствует стандарту ISO, но является громоздким. Лучший способ показать имена столбцов будет выглядеть так: NOT (tbl.col1 <= > 1)
Ответ 3
Если вы знаете, что RHS сравнения IS NOT NULL
:
COALESCE(tab.id != 1, 1)
Или
COALESCE(tab.id != 1, TRUE)
даст правильный результат.
Является ли это более читаемым, чем:
(tab.id != 1 OR tab.id IS NULL)
спорно..
У меня также возникнет соблазн отфильтровывать логику NULL
сначала с помощью сравнений, поэтому мне не нужно думать о них! Вероятно, я напишу ваше первое уравнение как:
(tab.id IS NULL OR tab.id != 1)
Производительность будет зависеть от распространенности NULL
.
Ответ 4
Теперь у MySQL нет NULL-безопасного не равного оператора.
Использование MySQL наиболее универсальным решением является:
!(tab.id <=> 1)
или
NOT tab.id <=> 1
потому что он будет работать правильно, если даже вместо 1
вы будете использовать NULL
.