Мне просто интересно. Я знаю о безопасном равном операторе NULL <=>, но есть ли какой-то NULL безопасный НЕ равный оператор, или я должен всегда использовать что-то вроде этого:
(tab.id != 1 OR tab.id IS NULL)
или кто-то предпочитает
!(tab.id <=> 1)
COALESCE(tab.id, 0) != 1
Может использоваться здесь, если вам это нравится. Я просматриваю параметры и возвращает первое значение, которое не является NULL
. В этом случае, если он NULL
, он будет сравнивать 0 != 1
. Хотя он может использовать больше знаков, все же легче управлять, а не принуждать к тому, чтобы всегда иметь противоположные «булевы» в качестве решения в этих случаях.
Прочитайте документацию для COALESCE()
Я обнаружил, что NOT (NULL <=> 1) работает, и я думаю, что он также соответствует стандарту ISO, но является громоздким. Лучший способ показать имена столбцов будет следующим: NOT (tbl.col1 <=> 1)
Если вы знаете, что 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
.
Теперь у MySQL нет NULL-безопасного не равного оператора.
Использование MySQL наиболее универсальным решением является:
!(tab.id <=> 1)
или
NOT tab.id <=> 1
потому что он будет работать правильно, если даже вместо 1
вы будете использовать NULL
.