文章详情

短信预约信息系统项目管理师 报名、考试、查分时间动态提醒

请输入下面的图形验证码

提交验证

短信预约提醒成功

MySQL ifnull的嵌套使用说明

2022-05-26 03:33

关注

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语句也可以在后面添加条件语句来补充其他条件查询。

MYSQL之ifnull的那些坑

废话不多说,直接看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的情况。

以上为个人经验,希望能给大家一个参考,也希望大家多多支持自学编程网。

阅读原文内容投诉

免责声明:

① 本站未注明“稿件来源”的信息均来自网络整理。其文字、图片和音视频稿件的所属权归原作者所有。本站收集整理出于非商业性的教育和科研之目的,并不意味着本站赞同其观点或证实其内容的真实性。仅作为临时的测试数据,供内部测试之用。本站并未授权任何人以任何方式主动获取本站任何信息。

② 本站未注明“稿件来源”的临时测试数据将在测试完成后最终做删除处理。有问题或投稿请发送至: 邮箱/279061341@qq.com QQ/279061341

软考中级精品资料免费领

  • 历年真题答案解析
  • 备考技巧名师总结
  • 高频考点精准押题
  • 2024年上半年信息系统项目管理师第二批次真题及答案解析(完整版)

    难度     813人已做
    查看
  • 【考后总结】2024年5月26日信息系统项目管理师第2批次考情分析

    难度     354人已做
    查看
  • 【考后总结】2024年5月25日信息系统项目管理师第1批次考情分析

    难度     318人已做
    查看
  • 2024年上半年软考高项第一、二批次真题考点汇总(完整版)

    难度     435人已做
    查看
  • 2024年上半年系统架构设计师考试综合知识真题

    难度     224人已做
    查看

相关文章

发现更多好内容

猜你喜欢

AI推送时光机
位置:首页-资讯-数据库
咦!没有更多了?去看看其它编程学习网 内容吧
首页课程
资料下载
问答资讯