我试图了解这个SQL(来自MySQL安装)实际上做了什么:
IF(coalesce(a.entity_id, 0) != 0, 0, 1)
虽然我理解合并的内容,但我不明白IF语句是如何修改它的。
答案 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理解你的问题。)
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。