在SQL中合并

时间:2014-11-14 22:22:22

标签: mysql sql sql-server

我在表格中有一个名为Indicator的列。它包含YNNULL或空白。

以下两个逻辑有什么作用?

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

似乎只是返回Indicator等于NY的行。还有别的事吗?

3 个答案:

答案 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'