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中null(IFNULL,COALESCE和NULLIF)相关知识点总结
本文实例讲述了mysql中null(IFNULL,COALESCE和NULLIF)相关知识点.分享给大家供大家参考,具体如下: 在MySQL中,NULL值表示一个未知值,它不同于0或空字符串'',并且不等于它自身. 我们如果将NULL值与另一个NULL值或任何其他值进行比较,则结果为NULL,因为一个不知道是什么的值(NULL值)与另一个不知道是什么的值(NULL值)比较,其值当然也是一个不知道是什么的值(NULL值). 然而我们通常,使用NULL值来表示数据丢失,未知或不适用的情况. 例如,潜
-
浅谈SQLServer的ISNULL函数与Mysql的IFNULL函数用法详解
SQL Serve的ISNULL函数: ISNULL(check_expression,replacement_value) 1.check_expression与replacement_value的数据类型必须一致. 2.如果check_expression为NULL,则返回replacement_value. 3.如果check_expression为NULL,则返回check_expression. Mysql的IFNULL函数: IFNULL(expr1,expr2) 如果expr1不是
-
MySql中的IFNULL、NULLIF和ISNULL用法详解
今天用到了MySql里的isnull才发现他和MSSQL里的还是有点区别,现在简单总结一下: mysql中isnull,ifnull,nullif的用法如下: isnull(expr) 的用法: 如expr 为null,那么isnull() 的返回值为 1,否则返回值为 0. mysql> select isnull(1+1); -> 0 mysql> select isnull(1/0); -> 1 使用= 的null 值对比通常是错误的. isnull() 函数同 is nul
-
MySQL IFNULL判空问题解决方案
问题:mybatis返回的null类型数据消失,导致前端展示出错 思路:如果查询出的结果是空值,应当转换成空字符串.当然在前端也能进行判断,但要求后台实现这个功能. 解决方案: 使用如下方法查询: SELECT IFNULL(sex,'') AS sex FROM user --如果查询到这个sex为null值,那么就赋值成空字符串 不过,如果查询语句本身为null,那么返回前端的还是null,这个就要在代码里判断了. 比如: SELECT IFNULL(sex,'') AS sex FROM
-
MySql中 is Null段判断无效和IFNULL()失效的解决方案
MySql Null字段判断,和IFNULL失效的处理 ps:(不想看过程就直接把你的sql外边加上 一个select就好了) select a,b,c from table group by a,b,c //这时候a,b,c 如果判断null不管用 select IFNULL(a,0),IFNULL(b,0),IFNULL(3,0) from (select a,b,c from table group by a,b,c ) //这样就好啦 不说废话举个栗子,首先看一下这个很简单的表 当我使用
-
mysql中IFNULL,IF,CASE的区别介绍
假设有一数据表的状态字段设计为varchar类型,有以下值:NULL,pending,pending refund,refund,cancel. 我们知道查询状态为cancel的订单,SQL语句可以这样写:SELECT o.oid,o.moneyreceipt,o.moneyget,o.thecurrency,o.status FROM qorder o WHERE o.status = 'cancel' SQL语句能查询出正确的数据,但是当我们想查询状态为非cancel的订单时,可能会出麻烦,
-
浅谈Mysql中类似于nvl()函数的ifnull()函数
IFNULL(expr1,expr2) 如果expr1不是NULL,IFNULL()返回expr1,否则它返回expr2.IFNULL()返回一个数字或字符串值,取决于它被使用的上下文环境. mysql> select IFNULL(1,0); -> 1 mysql> select IFNULL(0,10); -> 0 mysql> select IFNULL(1/0,10); -> 10 mysql> select IFNULL(1/0,'yes'); ->
-
mysql中替代null的IFNULL()与COALESCE()函数详解
在MySQL中isnull()函数不能作为替代null值! 如下: 首先有个名字为business的表: SELECT ISNULL(business_name,'no business_name') AS bus_isnull FROM business WHERE id=2 直接运行就会报错: 错误代码: 1582 Incorrect parameter count in the call to native function 'isnull' 所以,isnull()函数在mysql中就行不
-
MySQL ifnull的嵌套使用说明
MySQL ifnull的嵌套使用 在网上查询ifnull有没有嵌套使用的方式,但是貌似没有人提到过这个用法:大都是简单的判断一个字段是否为空,然后用另外一个值代替的方式使用: 即是: select ifnull(a,b) from A ; 但是我遇到的问题是两个字段,大概场景是这样的: 每一个商店会有两种打折方式vip_discount与simple_discount,从数据库查出来以discount字段命名:且以vip_discount为主. 意思是如果vip_discount不为空,就返回
-
Mysql 聚合函数嵌套使用操作
目的:Mysql 聚合函数嵌套使用 聚合函数不可以直接嵌套使用,比如: max(count(*)) 但是可以嵌套子查询使用 eg: 注:后面那个 as 必须要写 select max(total) from ( select count(*) as total from blog group by btype) as aa; 补充知识:mysql中MAX()函数和count()函数的技巧使用 1.max()函数 在考虑提高数据库io的情况下,可以创建索引 ===>create index 索引名
-
MySQL ifnull()函数的具体使用
MySQL IFNULL函数简介 MySQL IFNULL函数是MySQL控制流函数之一,它接受两个参数,如果不是NULL,则返回第一个参数. 否则,IFNULL函数返回第二个参数.两个参数可以是文字值或表达式. 以下说明了IFNULL函数的语法: IFNULL(expression_1,expression_2); 如果expression_1不为NULL,则IFNULL函数返回expression_1; 否则返回expression_2的结果. IFNULL函数根据使用的上下文返回字符串或数
-
Mysql中的嵌套子查询问题
目录 Mysql嵌套子查询 在WHERE子句中使用子查询 单行单列子查询 单行多列子查询. 多行单列子查询 FROM子查询: 总结: select子查询 用子查询 用子查询 Mysql嵌套子查询 子查询就是指的在一个完整的查询语句之中,嵌套若干个不同功能的小查询,从而一起完成复杂查询的一种编写形式,为了让读者更加清楚子查询的概念. 子查询返回结果子查询可以返回的数据类型一共分为四种: 单行单列:返回的是一个具体列的内容,可以理解为一个单值数据: 单行多列:返回一行数据中多个列的内容: 多行单列:
-
PHP mysql与mysqli事务使用说明 分享
mysqli封装了诸如事务等一些高级操作,同时封装了DB操作过程中的很多可用的方法. 应用比较多的地方是 mysqli的事务. 比如下面的示例: 复制代码 代码如下: $mysqli = new mysqli('localhost','root','','DB_Lib2Test');$mysqli->autocommit(false);//开始事物$mysqli->query($sql1);$mysqli->query($sql2);if(!$mysqli->errno){ $m
-
MySQL的字符串函数使用说明
通常以串的整体作为操作对象,如:在串中查找某个子串.求取一个子串.在串的某个位置上插入一个子串以及删除一个子串等.两个字符串相等的充要 条件是:长度相等,并且各个对应位置上的字符都相等.设p.q是两个串,求q在p中首次出现的位置的运算叫做模式匹配.串的两种最基本的存储方式是顺序存 储方式和链接存储方式. 下面我们来看看MySQL中的字符串函数 假如结果的长度大于 max_allowed_packet 系统变量的最大值时,字符串值函数的返回值为NULL. 对于在字符串位置操作的函数,第一个位置的编
-
mysql免安装制作使用说明
1>把压缩文件mysql-noinstall-5.1.6-alpha-win32.zip解压到一个目录下,在环境变量中设置MYSQL_HOME,把%MYSQL_HOME%\bin 加入到 path. 2>创建my.ini配置文件,内容如下:[mysqld]#设置basedir指向mysql的安装路径basedir=...\mysqldatadir=...\mysql\data my.ini文件放在系统文件下面. 3>启动与停止mysqlmysqld.exe --install(安装win
-
mysql截取函数常用方法使用说明
常用的mysql截取函数有:left(), right(), substring(), substring_index() 下面来一一说明一下: 1.左截取left(str, length) 2.右截取right(str, length) 3.substring(str, pos); substring(str, pos, len) 4.substring_index(str,delim,count)
-
SQL Server、Oracle和MySQL判断NULL的方法
本文讲述SQL Server.Oracle.MySQL查出值为NULL的替换. 在SQL Server Oracle MySQL当数据库中查出某值为NULL怎么办? 1.MSSQL: ISNULL() 语法 Java代码 复制代码 代码如下: ISNULL ( check_expression , replacement_value ) ISNULL ( check_expression , replacement_value ) 参数 check_expression 将被检查是否为 NULL
随机推荐
- ASP.NET 获取存储过程返回值的实现代码
- Memcached简介_动力节点Java学院整理
- js左右弹性滚动对联广告代码分享
- CSS+Js遮罩效果的TAB及焦点图片切换(推荐)
- js实现Select下拉框具有输入功能的方法
- 详解node单线程实现高并发原理与node异步I/O
- ASP 改良版MD5、SHA256多重加密类(二次及多次)
- Android中生成、使用Json数据实例
- 大数据时代的数据库选择:SQL还是NoSQL?
- MySql5.7.18字符集配置图文详解
- jquery实现隐藏在左侧的弹性弹出菜单效果
- layui表格实现代码
- SpringBoot整合Shiro的代码详解
- 汇总java调用python方法
- Java中使用BigDecimal进行精确运算
- javascript间隔刷新的简单实例
- 深入HRESULT与Windows Error Codes的区别详解
- Android Caused by: java.lang.ClassNotFoundException解决办法
- JAVA多线程CountDownLatch使用详解
- 一道值得深入思考的iOS面试题详解