为什么mysql查询中的if语句总是返回null?

时间:2014-09-25 12:09:21

标签: mysql

为什么以下代码始终返回NULL

查询

SELECT if(sum(amount)=NULL,0,sum(amount)) as amount
FROM item_details 
WHERE order_id = 1390;

7 个答案:

答案 0 :(得分:4)

您的语句只应在值为NULL时返回NULL。条件sum(amount) = NULL将始终返回" unknown",其被视为" false"。因此,只返回else部分而if并没有真正做任何事情。

您可能打算sum(amount) is null

如另一个答案所述,coalesce()是一个更好的解决方案。正确的形式是:

select coalesce(sum(amount), 0)
from item_details
where order_id = 1390;

如果你这样做:

select sum(coalesce(amount, 0))
from item_details
where order_id = 1390;

如果没有匹配,您仍会获得NULL

答案 1 :(得分:2)

与mysql中的NULL进行比较会产生NULL。请改用sum(amount) IS NULLsum(amount) IS NOT NULLhttp://dev.mysql.com/doc/refman/5.0/en/working-with-null.html

答案 2 :(得分:0)

尝试更改为

总和(合并(金额,0))作为金额

答案 3 :(得分:0)

尝试这样的事情:

SELECT if((sum(amount))=NULL,0,sum(amount)) as amount
FROM item_details 
WHERE order_id = 1390;

答案 4 :(得分:0)

SELECT if(sum(amount)=NULL,0,sum( coalesce( amount, 0 ))
FROM item_details 
WHERE order_id = 1390;

答案 5 :(得分:0)

这是您正在寻找的查询吗?

SELECT IFNULL(SUM(I.amount),0) as amount
FROM item_details I
WHERE I.order_id = 1390
GROUP BY I.order_id

我使用IFNULLGROUP BY子句来获得预期的结果。

希望这会对你有所帮助

答案 6 :(得分:0)

NULL不等于任何值,不等于NULL

NULL表示:未设置值 - >未知的价值。您无法将NULL与正常比较运算符(=,<,>等)进行比较,它没有任何价值。

SUM(Amount) = NULL始终为UNKNOWNUNKONWN在比较中被称为FALSE。

您可以通过其相关函数和比较运算符(例如NULLCOALESCE(expr1, expr2, ..., exprN)等)处理IS NULL值。

有关详细信息,请参阅MySQL documentation - Working with NULL Values

您应该将if(sum(amount)=NULL,0,sum(amount))表达式更改为COALESCE(SUM(amount), 0)以实现目标。

COALESCE()返回第一个非空表达式。