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ù)的相關(guān)資料展開對主題的詳細介紹,具有一定的參考價值,需要的小伙伴可以參考一下2022-04-04MySQL中日期和時間戳互相轉(zhuǎn)換的函數(shù)和方法
這篇文章主要介紹了MySQL中日期和時間戳互相轉(zhuǎn)換的函數(shù)和方法,本文分別講解了時間戳轉(zhuǎn)換成日期的方法和把日期轉(zhuǎn)換為時間戳的方法,需要的朋友可以參考下2015-06-06淺談mysql 系統(tǒng)用戶最大文件打開數(shù)限制
這篇文章主要介紹了mysql 系統(tǒng)用戶最大文件打開數(shù)限制,文中通過示例代碼介紹的非常詳細,對大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價值,需要的朋友們下面隨著小編來一起學(xué)習(xí)學(xué)習(xí)吧2019-03-03mysql8.0.20配合binlog2sql的配置和簡單備份恢復(fù)的步驟詳解
這篇文章主要介紹了mysql8.0.20配合binlog2sql的配置和簡單備份恢復(fù)的步驟,本文給大家介紹的非常詳細,對大家的學(xué)習(xí)或工作具有一定的參考借鑒價值,需要的朋友可以參考下2020-09-09