欧美bbbwbbbw肥妇,免费乱码人妻系列日韩,一级黄片

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 )  //這樣就好啦

不說廢話舉個栗子,首先看一下這個很簡單的表

在這里插入圖片描述

當(dāng)我使用SQL語句通過PID進行分組查詢,把列轉(zhuǎn)為行的時候結(jié)果展示是這樣的

在這里插入圖片描述

不管我怎么IFNULL(SID1,0) 或者 IF( SID1 is null,0,SID1)展示結(jié)果依舊是 NULL -.-!很無奈啊。

我的sql是這么寫的 沒有用過 MAX函數(shù)的可以直接忽略,只看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

但是我發(fā)現(xiàn)結(jié)果仍舊是NULL,然后我發(fā)現(xiàn),IFNULL(),is null 這些判斷只能判斷出來表中存在這個對應(yīng)的字段,并且為NULL才可以,而我的表中很明顯沒有這個字段,所以是判斷不出來的!

在你Select之后通過處理查詢出來的NULL mysql 的is null 和IFNULL() 是不識別的

說了這么多,那應(yīng)該怎么解決呢?

很簡單,沒有表就來一個唄?。ㄐ陆ㄒ粋€Table?)想啥呢!

首先,去掉查詢中的IFNULL,沒有作用留著干嘛,

然后用一個 select 語句把剛才的結(jié)果集當(dāng)做一個表來查詢,這樣就相當(dāng)于你查詢的表中存在這個字段,而且值為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

看吧,結(jié)果就出來了 哈哈哈哈哈~

在這里插入圖片描述

MySql使用 IFNULL() 遇到的問題

關(guān)于 ifnull() 函數(shù)

IFNULL(a,b) c

如果a不為null,則 c 的值為 a

如果a為null,則 c 的值為 b

實際使用時遇到的問題

IFNULL(a,b) c

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

而實際想要的結(jié)果是,a 為空字符串或者null, c 的值都為b。

解決方案

改用 if()函數(shù)

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

這段的意思是:如果 a 為 null 或者空字符串,c=b;否則 c=a;

以上為個人經(jīng)驗,希望能給大家一個參考,也希望大家多多支持腳本之家。

相關(guān)文章

  • Mysql事務(wù)并發(fā)臟讀+不可重復(fù)讀+幻讀詳解

    Mysql事務(wù)并發(fā)臟讀+不可重復(fù)讀+幻讀詳解

    這篇文章主要介紹了Mysql事務(wù)并發(fā)臟讀+不可重復(fù)讀+幻讀詳解,文章基于Mysql事務(wù)的相關(guān)資料展開對主題的詳細介紹,具有一定的參考價值,需要的小伙伴可以參考一下
    2022-04-04
  • 可以改善mysql性能的InnoDB配置參數(shù)

    可以改善mysql性能的InnoDB配置參數(shù)

    MySQL與MSSQL 有一個區(qū)別在于MySQL建表的時候需要選擇存儲引擎,常用的存儲引擎有MyISAM和InnoDB
    2011-05-05
  • MySQL中日期和時間戳互相轉(zhuǎn)換的函數(shù)和方法

    MySQL中日期和時間戳互相轉(zhuǎn)換的函數(shù)和方法

    這篇文章主要介紹了MySQL中日期和時間戳互相轉(zhuǎn)換的函數(shù)和方法,本文分別講解了時間戳轉(zhuǎn)換成日期的方法和把日期轉(zhuǎn)換為時間戳的方法,需要的朋友可以參考下
    2015-06-06
  • MySQL優(yōu)化教程之慢查詢?nèi)罩緦嵺`

    MySQL優(yōu)化教程之慢查詢?nèi)罩緦嵺`

    在MySQL中慢查詢?nèi)罩局饕脕碛涗涰憫?yīng)時間超過閾值的SQL,下面這篇文章主要給大家介紹了關(guān)于MySQL優(yōu)化教程之慢查詢?nèi)罩镜南嚓P(guān)資料,文中通過實例代碼介紹的非常詳細,需要的朋友可以參考下
    2022-06-06
  • MariaDB 新版本實力逆襲不僅僅是 MySQL 替代品

    MariaDB 新版本實力逆襲不僅僅是 MySQL 替代品

    MariaDB是MySQL源代碼的一個分支,主要由開源社區(qū)在維護,采用GPL授權(quán)許可。MariaDB 10.0和MySQL 5.6的不同之處有那些,MariaDB和Percona有什么不同呢?下面通過本文詳細了解下吧
    2016-12-12
  • windows10安裝mysql5.7.18教程

    windows10安裝mysql5.7.18教程

    windows10安裝mysql5.7.18是這樣安裝的嗎?這篇文章主要為大家詳細介紹了win10下mysql5.7.18安裝配置方法,具有一定的參考價值,感興趣的小伙伴們可以參考一下
    2017-04-04
  • 淺談mysql 系統(tǒng)用戶最大文件打開數(shù)限制

    淺談mysql 系統(tǒng)用戶最大文件打開數(shù)限制

    這篇文章主要介紹了mysql 系統(tǒng)用戶最大文件打開數(shù)限制,文中通過示例代碼介紹的非常詳細,對大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價值,需要的朋友們下面隨著小編來一起學(xué)習(xí)學(xué)習(xí)吧
    2019-03-03
  • MySQL分區(qū)之KEY分區(qū)詳解

    MySQL分區(qū)之KEY分區(qū)詳解

    按照key進行分區(qū)非常類似于按照hash進行分區(qū),只不過hash分區(qū)允許使用用戶自定義的表達式,下面這篇文章主要給大家介紹了關(guān)于MySQL分區(qū)之KEY分區(qū)的相關(guān)資料,需要的朋友可以參考下
    2022-04-04
  • MYSQL導(dǎo)入導(dǎo)出命令詳解

    MYSQL導(dǎo)入導(dǎo)出命令詳解

    網(wǎng)上看了一些總結(jié)出來的資料,不知道對大家有沒有用的,有用的話也就不枉費我一按按鈕的一片苦心了
    2007-09-09
  • mysql8.0.20配合binlog2sql的配置和簡單備份恢復(fù)的步驟詳解

    mysql8.0.20配合binlog2sql的配置和簡單備份恢復(fù)的步驟詳解

    這篇文章主要介紹了mysql8.0.20配合binlog2sql的配置和簡單備份恢復(fù)的步驟,本文給大家介紹的非常詳細,對大家的學(xué)習(xí)或工作具有一定的參考借鑒價值,需要的朋友可以參考下
    2020-09-09

最新評論