X is [not] distinct from Y

«Пост-Грэс-Кью-Эл» свободная объектно-реляционная СУБД. Обмениваемся вопросами и ответами о её работе.
Ответить
Naeel Maqsudov
Сообщения: 3
Зарегистрирован: Пт апр 19, 2024 7:28 pm

X is [not] distinct from Y

Сообщение Naeel Maqsudov »

По случаю пришлось мне на полуторамиллионой выборке сравнивать с учётом NULL, т.е.:

Код: Выделить всё

... where x = y or x is null and y is null 
В реальной жизни, с учётом наличия других условий, без скобок это не пишется. И тут я вспомнил из прочитанного мимоходом где-то года полтора назад (так сошлись две случайности), что на сегодняшний день есть две СУБД, которые реализовали стандартную фичу SQL (описанную в стандарте) «is distinct from» — PG и SQLite.
Эта штука делает ровно такое сравнение — с учётом NULL. Правда, мне пока не приходит в голову пример, когда бы оно подадобилось без «not». Т.е. пример выше приобретает вид:

Код: Выделить всё

... where x = y is not distinct from y
Даже с учётом того, что «is [not] distinct from» длинноватый и странноватый оператор сравнения :), это улучшает читабельность кода очень хорошо, да ещё и избавляет от «or».

Но кажется что тут есть и ложка дёгтя. Мне показалось что в PG эта фича работает заметно медленнее, чем сравнение с null по старинке. Буду признатален, если кто-нибудь потестирует это на производительность целенаправленно.

P.S.
На этом форуме нашлась ссылка на стандарт SQL99, выложенный кем-то бесплатно: http://web.cecs.pdx.edu/~len/sql1999.pdf
См §8.13, стр. 318. Оказывается стандарт разрешает использовать это сравнение не только со скалярными данными. Не знаю, что из его возможностей реализовано в PG.
Naeel Maqsudov
Сообщения: 3
Зарегистрирован: Пт апр 19, 2024 7:28 pm

Re: X is [not] distinct from Y

Сообщение Naeel Maqsudov »

Вот где я случайно случайно когда-то прочитал про этот distinct from: https://modern-sql.com/concept/null
Ответить