MySql中 is Null段判断无效和IFNULL()失效的解决方案

 更新时间:2021年06月16日 14:43:35   作者:1024~  
这篇文章主要介绍了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 )  //这样就好啦

不说废话举个栗子,首先看一下这个很简单的表

在这里插入图片描述

当我使用SQL语句通过PID进行分组查询,把列转为行的时候结果展示是这样的

在这里插入图片描述

不管我怎么IFNULL(SID1,0) 或者 IF( SID1 is null,0,SID1)展示结果依旧是 NULL -.-!很无奈啊。

我的sql是这么写的 没有用过 MAX函数的可以直接忽略,只看IFNULL就好,很明显我是加了IFNULL的。

SELECT
			PID,
			MAX(CASE WHEN SID = 1 THEN IFNULL(PNUM ,0) END) AS SID1,
			MAX(CASE WHEN SID = 2 THEN IFNULL(PNUM ,0) END) AS SID2,
			MAX(CASE WHEN SID = 3 THEN IFNULL(PNUM ,0) END) AS SID3
		FROM
			(
				SELECT
					PID,
					SUM(PNUM) PNUM,
					SID
				FROM
					A
				GROUP BY
					PID
			) temp
		GROUP BY
			temp.PID

但是我发现结果仍旧是NULL,然后我发现,IFNULL(),is null 这些判断只能判断出来表中存在这个对应的字段,并且为NULL才可以,而我的表中很明显没有这个字段,所以是判断不出来的!

在你Select之后通过处理查询出来的NULL mysql 的is null 和IFNULL() 是不识别的

说了这么多,那应该怎么解决呢?

很简单,没有表就来一个呗!(新建一个Table?)想啥呢!

首先,去掉查询中的IFNULL,没有作用留着干嘛,

然后用一个 select 语句把刚才的结果集当做一个表来查询,这样就相当于你查询的表中存在这个字段,而且值为NULL

SELECT
	PID,IFNULL(SID1,0) SID1,IFNULL(SID2,0) SID2,IFNULL(SID3,0) SID3
FROM
	(
		SELECT
			PID,
			MAX(CASE WHEN SID = 1 THEN PNUM END) AS SID1,
			MAX(CASE WHEN SID = 2 THEN PNUM END) AS SID2,
			MAX(CASE WHEN SID = 3 THEN PNUM END) AS SID3
		FROM
			(
				SELECT
					PID,
					SUM(PNUM) PNUM,
					SID
				FROM
					A
				GROUP BY
					PID
			) temp
		GROUP BY
			temp.PID
	) temp1

看吧,结果就出来了 哈哈哈哈哈~

在这里插入图片描述

MySql使用 IFNULL() 遇到的问题

关于 ifnull() 函数

IFNULL(a,b) c

如果a不为null,则 c 的值为 a

如果a为null,则 c 的值为 b

实际使用时遇到的问题

IFNULL(a,b) c

若 a 不是为null,而是为 ' ' 空字符串,则 c 的值为 a 空字符串。

而实际想要的结果是,a 为空字符串或者null, c 的值都为b。

解决方案

改用 if()函数

if(a ='' or a  is null,b,a) c

这段的意思是:如果 a 为 null 或者空字符串,c=b;否则 c=a;

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

相关文章

  • 简述Redis和MySQL的区别

    简述Redis和MySQL的区别

    这篇文章主要介绍了简述Redis和MySQL的区别,小编觉得挺不错的,这里给大家分享下,需要的朋友可以了解。
    2017-10-10
  • mysql利用覆盖索引避免回表优化查询

    mysql利用覆盖索引避免回表优化查询

    这篇文章主要给大家介绍了关于mysql如何利用覆盖索引避免回表优化查询的相关资料,文中通过示例代码介绍的非常详细,对大家的学习或者工作具有一定的参考学习价值,需要的朋友们下面随着小编来一起学习学习吧
    2021-02-02
  • 详解MySQL8的新特性ROLE

    详解MySQL8的新特性ROLE

    这篇文章主要介绍了详解MySQL8的新特性ROLE的相关资料,帮助大家更好的理解和使用MySQL8,感兴趣的朋友可以了解下
    2020-11-11
  • 关于Mysql隔离级别、锁与MVCC介绍

    关于Mysql隔离级别、锁与MVCC介绍

    本篇文章给大家详细介绍了一下关于Mysql隔离级别、锁与MVCC的相关知识,有这方面兴趣的朋友参考下。
    2018-01-01
  • 详解MySQL InnoDB的索引扩展

    详解MySQL InnoDB的索引扩展

    这篇文章主要介绍了MySQL InnoDB的索引扩展的相关资料,帮助大家更好的理解和学习MySQL,感兴趣的朋友可以了解下
    2020-08-08
  • MySQL中的数据加密解密安全技术教程

    MySQL中的数据加密解密安全技术教程

    在数据库应用程序中,数据的安全性是至关重要的,MySQL作为一种常用的关系型数据库管理系统,也提供了一些数据加密和解密的技巧来保护敏感数据的安全性,为了保护敏感数据免受未经授权的访问,我们可以使用加密和解密技术
    2024-01-01
  • MySQL配置文件my.ini全过程

    MySQL配置文件my.ini全过程

    这篇文章主要介绍了MySQL配置文件my.ini全过程,具有很好的参考价值,希望对大家有所帮助。如有错误或未考虑完全的地方,望不吝赐教
    2022-08-08
  • MySQL update set 和 and的区别

    MySQL update set 和 and的区别

    这篇文章主要介绍了MySQL update set 和 and的区别,帮助大家更好的理解和学习使用MySQL数据库,感兴趣的朋友可以了解下
    2021-05-05
  • mysql 8.0.22压缩包完整安装与配置教程图解(亲测安装有效)

    mysql 8.0.22压缩包完整安装与配置教程图解(亲测安装有效)

    这篇文章主要介绍了mysql 8.0.22压缩包完整安装与配置教程图解(亲测安装有效),本文通过图文并茂的形式给大家介绍的非常详细,对大家的学习或工作具有一定的参考借鉴价值,需要的朋友可以参考下
    2020-12-12
  • MySQL5.7.18修改密码的方法

    MySQL5.7.18修改密码的方法

    这篇文章主要介绍了MySQL5.7.18修改密码的方法,非常不错,具有参考解决价值,需要的朋友可以参考下
    2017-05-05

最新评论