只是想知道,如果sum(credits)!= null或mySQL对此类查询进行优化,则MySQL将如何处理此查询。
select if(sum(credits)=NULL, 0, sum(credits)) from ......
谢谢
如果行不通。第一个条件始终是错误的。与NULL
相比的正确方法是IS NULL
,而不是=
。
只使用此构造:
select coalesce(sum(credits), 0)
使用
SELECT IF(sum(credits) IS NULL, 0 ,sum(credits)) .....
if(expr1,expr2,expr3)
如果expr1为true(expr1<> 0和expr1<> null),则if()返回expr2;否则,它将返回expr3。如果()返回数字或字符串值,具体取决于使用的上下文
使用ifnull
SELECT IFNULL(sum(credits), 0) .....
使用cocece
SELECT COALESCE(sum(credits), 0) .....
参考:mySQL控制流函数
这是我们不必担心的事情。使用SQL,我们告诉DBMS该怎么做,而不是如何做。
DBM非常有可能仅计算一次sum(credits)
。如果没有,这似乎很愚蠢。但是,这不是由SQL标准决定的,因此DBMS程序员可以自由选择如何编码。他们可以编写DBM,以便计算两次sum(credits)
。我们不知道他们是否做到了,但是如前所述,我们也不必担心。