溫馨提示×

溫馨提示×

您好,登錄后才能下訂單哦!

密碼登錄×
登錄注冊×
其他方式登錄
點擊 登錄注冊 即表示同意《億速云用戶服務條款》

MySql中如何解決 is Null段判斷無效和IFNULL()失效

發(fā)布時間:2021-06-16 16:40:38 來源:億速云 閱讀:820 作者:chen 欄目:開發(fā)技術

這篇文章主要講解了“MySql中如何解決 is Null段判斷無效和IFNULL()失效”,文中的講解內容簡單清晰,易于學習與理解,下面請大家跟著小編的思路慢慢深入,一起來研究和學習“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中如何解決 is Null段判斷無效和IFNULL()失效

當我使用SQL語句通過PID進行分組查詢,把列轉為行的時候結果展示是這樣的

MySql中如何解決 is Null段判斷無效和IFNULL()失效

不管我怎么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

但是我發(fā)現(xiàn)結果仍舊是NULL,然后我發(fā)現(xiàn),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中如何解決 is Null段判斷無效和IFNULL()失效

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;

感謝各位的閱讀,以上就是“MySql中如何解決 is Null段判斷無效和IFNULL()失效”的內容了,經過本文的學習后,相信大家對MySql中如何解決 is Null段判斷無效和IFNULL()失效這一問題有了更深刻的體會,具體使用情況還需要大家實踐驗證。這里是億速云,小編將為大家推送更多相關知識點的文章,歡迎關注!

向AI問一下細節(jié)

免責聲明:本站發(fā)布的內容(圖片、視頻和文字)以原創(chuàng)、轉載和分享為主,文章觀點不代表本網站立場,如果涉及侵權請聯(lián)系站長郵箱:is@yisu.com進行舉報,并提供相關證據,一經查實,將立刻刪除涉嫌侵權內容。

AI