我在表格中有一个名为Indicator
的列。它包含Y
,N
,NULL
或空白。
以下两个逻辑有什么作用?
coalesce(Indicator, 'N') = 'N'
coalesce(Indicator, 'N') = 'Y'
似乎只是返回Indicator
等于N
或Y
的行。还有别的事吗?
答案 0 :(得分: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
答案 1 :(得分:0)
逻辑做了两件事。从功能上讲,第一个表达式相当于:
(Indicator = 'N' or Indicator is null)
此外,它还可以防止在indicator
上使用索引(在大多数数据库中)。
对于二元指标,索引的使用通常不太重要。此外,SQL优化器在使用or
条件的索引方面非常糟糕。并且,当列是函数的参数时,它们几乎从不使用它们。
答案 2 :(得分:0)
coalesce(Indicator, 'N')
表示如果Indicator is null
然后取N
作为其值,则其值为Indicator
。
所以,如果Indicator is null
,则以下条件保留TRUE
coalesce(Indicator, 'N') = 'N'