试图解析这个SQL

时间:2011-08-26 20:08:55

标签: mysql sql

我试图了解这个SQL(来自MySQL安装)实际上做了什么:

IF(coalesce(a.entity_id, 0) != 0, 0, 1)

虽然我理解合并的内容,但我不明白IF语句是如何修改它的。

6 个答案:

答案 0 :(得分:3)

我想:

coalesce(a.entity_id,0) - 返回第一个非空值,

如果a.entity_id不为null,则由于if而生成0,否则为1。

a.entity_id = null => coalesce = 0 => if = 1

a.entity_id不是null => coalesce = a.entity_id => if = 0

答案 1 :(得分:2)

coalesce返回第一个NON-null参数。因此,如果a.entity_id为null,则coalesce将返回0.包含if()然后检查参数是否为零,并返回0或1.

基本上这是一种令人费解的写作方式a.entity_id IS NULL

答案 2 :(得分:1)

您正在查看 MySQL IF()函数。基本上它是参数1中提供的布尔表达式的三元运算符。(听起来你用COALESCE理解你的问题。)

  • 如果expr1为TRUE(expr1<> 0且expr1<> NULL),则IF()返回expr2;
  • 如果expr1为FALSE,则返回expr3。
  

IF()返回数值或字符串值,具体取决于使用它的上下文。

mysql> SELECT IF(1>2,2,3);
        -> 3
mysql> SELECT IF(1<2,'yes','no');
        -> 'yes'
mysql> SELECT IF(STRCMP('test','test1'),'no','yes');
        -> 'no'

这是一种非常时髦的不可读方式,不使用a.entity_id IS NULL

答案 3 :(得分:1)

如果a.entity_id的值不是NULL AND 而不是0,则会满足条件。

答案 4 :(得分:0)

答案 5 :(得分:0)

在我看来,如果a.entity_id不为null,则此子句将评估为0,否则为1。