Здравствуйте, blonduser, Вы писали:
B>Вывожу из таблицы значения по условию "Column1" <> "ValueX".
B>В выходной набор данных не попадают значения "Column1" IS NULL, хотя по логике должны.
По логике не должны. Вы неправильно понимаете что такое NULL.
NULL — это не значение, это отсутствие каких-либо данных о значении.
Поэтому
'value' <> NULL
выдает не true, а unknown.
Т.к. результат сравнения не true, то строка в выборку не попадает.
Обойти это нельзя. Точнее можно чем-нибудь вроде
isnull(column1, 'valueNotX') <> 'valueX'
но вряд ли план выполнения при этом будет лучше, чем с доп. условием.
Здравствуйте, _ABC_, Вы писали:
_AB>Обойти это нельзя. Точнее можно чем-нибудь вроде
_AB>_AB>isnull(column1, 'valueNotX') <> 'valueX'
_AB>
_AB>но вряд ли план выполнения при этом будет лучше, чем с доп. условием.
Если построить индекс, то хуже план не станет. Но есть другое: всегда найдется такое ValueX, которое напрочь поломает результат выборки. Да и лишний индекс иногда критичен бывает, если много изменений в таблицу пишется.
Здравствуйте, LuciferNovoros, Вы писали:
LN>Здравствуйте, _ABC_, Вы писали:
_AB>>Обойти это нельзя. Точнее можно чем-нибудь вроде
_AB>>_AB>>isnull(column1, 'valueNotX') <> 'valueX'
_AB>>
_AB>>но вряд ли план выполнения при этом будет лучше, чем с доп. условием.
LN>Если построить индекс, то хуже план не станет. Но есть другое: всегда найдется такое ValueX, которое напрочь поломает результат выборки. Да и лишний индекс иногда критичен бывает, если много изменений в таблицу пишется.
Filtered Index по IS NOT NULL и в выборку включить условие