2014-11-14 7 views
2

У меня есть столбец под названием Indicator в таблице. Он содержит Y, N, NULL, или просто пробел.coalesce in SQL

Что делают следующие две логики?

coalesce(Indicator, 'N') = 'N' 
coalesce(Indicator, 'N') = 'Y' 

Это не похоже, просто возвращать строки, где Indicator равно N или Y. Что-то еще происходит?

ответ

2

Для каждого условия есть другой ответ

Для

coalesce(Indicator, 'N') = 'N' 

Вы

coalesce('N', 'N') = 'N' --> 'N' = 'N' --> True 
coalesce('Y', 'N') = 'N' --> 'Y' = 'N' --> False 
coalesce(Null, 'N') = 'N' --> 'N' = 'N' --> True 

и

coalesce(Indicator, 'N') = 'Y' 

вы получите

coalesce('N', 'N') = 'N' --> 'N' = 'N' --> True 
coalesce('Y', 'N') = 'N' --> 'Y' = 'N' --> False 
coalesce(Null, 'N') = 'Y' --> 'N' = 'Y' --> False 
0

Логика делает две вещи. Функционально, первое выражение эквивалентно:

(Indicator = 'N' or Indicator is null) 

Кроме того, она также предотвращает индекс от использования на indicator (в большинстве баз данных).

Для двоичного индикатора использование индекса обычно имеет второстепенное значение. Кроме того, оптимизаторы SQL довольно плохо при использовании индексов для условий or. И они почти никогда не используют их, когда столбец является аргументом функции.

0

coalesce(Indicator, 'N') говорит, что если Indicator is null, тогда возьмите N как его значение else значение принадлежит Indicator.

так, если Indicator is null то ниже условие TRUE

coalesce(Indicator, 'N') = 'N'