今天写代码,发现一个sql怎么也允许不成功

select IFNULL(fund_total,0) from fund where user_id='AD4BF1FDBEE24C7A809D04D7B8FEBB17' and status='approved'

发现如果是null时,ifnull函数失效,如果不是null,执行正常,找了半天才找到帖子内容如下:

SELECT IFNULL((select fund_total from fund where user_id=#{arg0} and status='approved'),0)

修改sql语句(如上)后执行正确

其中的原理我还不知道,可能,ifnull(expr1,expr2)中的expr应该是没有'变量'的表达式吧,例如: 1/0(在mysql中,它会返回0),

而select fund_total from fund where user_id=#{arg0} and status='approved' 中有 '变量'---'fund_total ',需要加一个括号括起来,让mysql转化'变量'为'常量',

当然这也只是我的猜想,没有依据,下面是帖子原文,我懒得写,直接粘过来了.

 

 

首先建一张简单的表,用于sql语句的操作

建表语句如下:

CREATE TABLE `student` (
`id`  int(11) NOT NULL AUTO_INCREMENT COMMENT '主键' ,
`name`  varchar(8) CHARACTER SET utf8 COLLATE utf8_general_ci NOT NULL DEFAULT '' COMMENT '名字' ,
`score`  int(4) NOT NULL DEFAULT 0 COMMENT '分数' ,
PRIMARY KEY (`id`)
);
手动创建数据如下:

现在开始正题:

a. IFNULL的作用是什么?下面一个简单的sql和结果说明,如果IFNULL(a,b),a接收的值为null,则返回b,否则返回a;

SELECT IFNULL(NULL,0);


b. 以下sql语句,大家可以预测下结果,按照IFNULL函数的作用,应该返回0才对,可是结果并不是这样。

SELECT IFNULL(score,0) FROM student WHERE ID = 4;
返回结果,居然是null,与预期的结果0不一致。

c. 以下语句返回正确结果0;

SELECT IFNULL((SELECT score FROM student WHERE ID = 4),0);
总结:使用b方式使用IFNULL、SUM函数等需要确保有查询记录,否则也将返回null值,当然也可使用c方式避免返回null值,避免程序中出现NPE异常。
————————————————
版权声明:本文为CSDN博主「_再见阿郎_」的原创文章,遵循CC 4.0 BY-SA版权协议,转载请附上原文出处链接及本声明。
原文链接:https://blog.csdn.net/FU250/article/details/79989410

Logo

为开发者提供学习成长、分享交流、生态实践、资源工具等服务,帮助开发者快速成长。

更多推荐