这篇文章主要讲解了“MySQL ifnull的嵌套使用方法”,文中的讲解内容简单清晰,易于学习与理解,下面请大家跟着小编的思路慢慢深入,一起来研究和学习“MySQL ifnull的嵌套使用方法”吧!
在网上查询ifnull有没有嵌套使用的方式,但是貌似没有人提到过这个用法:大都是简单的判断一个字段是否为空,然后用另外一个值代替的方式使用;
即是:
select ifnull(a,b) from A ;
每一个商店会有两种打折方式vip_discount与simple_discount,从数据库查出来以discount字段命名;且以vip_discount为主。
意思是如果vip_discount不为空,就返回它的值,若它的值为空就要进一步判断simple_discount字段是否为空,如果不为空就返回simple_discount的值,否则就返回一个空字符串。
这里我就想到了可不可以使用ifnull嵌套来判断达到我的目的。
在网上查了许久也没有发现有类似的博客,就寻思自己试试不就行啦:
select ifnull(vip_discount,ifnull(simple_discount,"")) as discount from A;
这样就解决问题了,此SQL语句也可以在后面添加条件语句来补充其他条件查询。
废话不多说,直接看SQL:
UPDATE
lb_user u
SET u.user_level = (
SELECT
IFNULL(levelid, u.user_level)
FROM lb_user_level
WHERE `status` = 1 AND levelid > u.user_level
AND (upgrade_score < u.empirical OR upgrade_total_money < u.total_consumption_money)
ORDER BY levelid DESC
LIMIT 1
);
这个SQL乍一看没什么问题,执行的时候也成功了,可再次执行就修改出错,原因是根据当前的条件无法检索出数据,返回数据为空,注意是数据为空,没有这条数据,而不是有这条数据存在该字段为空,经过排查,修改SQL如下:
UPDATE
lb_user u
SET u.user_level = IFNULL((
SELECT
levelid
FROM lb_user_level
WHERE `status` = 1 AND levelid > u.user_level
AND (upgrade_score < u.empirical OR upgrade_total_money < u.total_consumption_money)
ORDER BY levelid DESC
LIMIT 1
), u.user_level);
经过修改后执行就成功了,并且不存在IFNULL失效的情况;
MYSQL中IFNULL仅可以判断该数据存在的情况下为NULL,而不能判断该条数据没有查询到而为NULL的情况。
感谢各位的阅读,以上就是“MySQL ifnull的嵌套使用方法”的内容了,经过本文的学习后,相信大家对MySQL ifnull的嵌套使用方法这一问题有了更深刻的体会,具体使用情况还需要大家实践验证。这里是亿速云,小编将为大家推送更多相关知识点的文章,欢迎关注!
亿速云「云数据库 MySQL」免部署即开即用,比自行安装部署数据库高出1倍以上的性能,双节点冗余防止单节点故障,数据自动定期备份随时恢复。点击查看>>
免责声明:本站发布的内容(图片、视频和文字)以原创、转载和分享为主,文章观点不代表本网站立场,如果涉及侵权请联系站长邮箱:is@yisu.com进行举报,并提供相关证据,一经查实,将立刻删除涉嫌侵权内容。