MySQL – NULL безопасный НЕ равный оператор

Мне просто интересно. Я знаю о безопасном равном операторе 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 .