ifnull查询条件本为null时无效问题解决

在调试的时候,mybatis却一直报错该语句尝试返回null但定义的返回类型时int。说明这个函数并没有起作用。那为什么没有起作用呢?

那是因为这条语句的查询结果就是空的,也就是说,当传进来的参数是非子菜单时时,下面这条语句的返回值就是null

1 (SELECT parent_id from menu where code = #{menuCode} and parent_id != 0)

当这条语句返回null时,整条语句的返回值都是空的(where分支比select分支优先执行),这时,等价于下面这条语句:

1 SELECT IFNULL(id,0) from project_menu where code = NULL

这就不是这个当id为空时,用0替换id返回这个概念了,因为当语句本身就是null时,语句中的函数还会起作用吗?

所以,此方法行不通,附上解决方案:

SELECT
CASE
WHEN (SELECT parent_id from menu where code = #{code}) = 0
THEN 0
ELSE
(SELECT id from project_menu where code =
(SELECT code FROM menu where id =
(SELECT parent_id from menu where code =#{code} ))
AND project_id=#{projectId})
END


例子:原来的sql语句:select provinceID from kdmc_t_province where name =#{province}
由于name=的province本来就为null,导致ifnull无效
select ifnull(provinceID ,0) from kdmc_t_province where name =#{province}
解决方法:
select CASE WHEN (select provinceID from kdmc_t_province where name =#{province})is null THEN
0
ELSE (select provinceID from kdmc_t_province where name =#{province})
END;
解决!!


链接:https://www.jianshu.com/p/d59589221f2c
来源:简书
 

你可能感兴趣的:(mysql)