Страницы

Поиск по вопросам

пятница, 29 марта 2019 г.

SQL запрос с NULL в WHERE

Всем привет. Есть таблица categories, в ней есть родительские категории, т.е. те, в которых parent_id = NULL. Почему следующий запрос возвращает 0 строк?
SELECT * FROM categories WHERE parent_id = NULL


Ответ

NULL - это "специальное" значение, которое по смыслу схоже с "неопределённое значение".
NULL != NULL
т.к. одно "неопределенное значение" не обязательно равно другому "неопределенному значению", поэтому в стандарте SQL существуют конструкции IS NULL, IS NOT NULL, COALESCE(...) и подобные им.
Надо использовать IS NULL / IS NOT NULL
SELECT * FROM categories WHERE parent_id IS NULL
UPDATE: "доходчивое" определение значения NULL от @Akina
Я обычно предлагаю использовать другой эквивалент: фиг знает. Тогда объяснение хотя бы становится логичным: "Равно ли первое фиг знает второму фиг знает?" или "Равно ли значение Х значению фиг знает?" (тут вместо Х подставляется число, строка, дата или переменная). Правильный ответ очевиден: а фиг знает.

Комментариев нет:

Отправить комментарий