• 企业400电话
  • 微网小程序
  • AI电话机器人
  • 电商代运营
  • 全 部 栏 目

    企业400电话 网络优化推广 AI电话机器人 呼叫中心 网站建设 商标✡知产 微网小程序 电商运营 彩铃•短信 增值拓展业务
    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语句也可以在后面添加条件语句来补充其他条件查询。

    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的情况。

    以上为个人经验,希望能给大家一个参考,也希望大家多多支持脚本之家。

    您可能感兴趣的文章:
    • MySql中 is Null段判断无效和IFNULL()失效的解决方案
    • MySQL IFNULL判空问题解决方案
    • mysql中null(IFNULL,COALESCE和NULLIF)相关知识点总结
    • mysql中替代null的IFNULL()与COALESCE()函数详解
    • 浅谈Mysql中类似于nvl()函数的ifnull()函数
    • MySql中的IFNULL、NULLIF和ISNULL用法详解
    • 浅谈SQLServer的ISNULL函数与Mysql的IFNULL函数用法详解
    • mysql中IFNULL,IF,CASE的区别介绍
    上一篇:MySql中 is Null段判断无效和IFNULL()失效的解决方案
    下一篇:关于Mysql-connector-java驱动版本问题总结
  • 相关文章
  • 

    © 2016-2020 巨人网络通讯 版权所有

    《增值电信业务经营许可证》 苏ICP备15040257号-8

    MySQL ifnull的嵌套使用说明 MySQL,ifnull,的,嵌套,使用说明,