MySQL - NULL безопасный НЕ равный оператор - программирование
Подтвердить что ты не робот

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

Мне просто интересно. Я знаю о NULL безопасном равном операторе <= > , но есть ли какой-то NULL безопасный НЕ равный оператор, или я должен всегда использовать что-то вроде этого:

(tab.id != 1 OR tab.id IS NULL)

или кто-то предпочитает

!(tab.id <=> 1)
4b9b3361

Ответ 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.