1. 程式人生 > >mysql case when多條件同時滿足的多個and組合巢狀的情況,判斷空is null --- 系列二

mysql case when多條件同時滿足的多個and組合巢狀的情況,判斷空is null --- 系列二

方法一:

SELECT id, time, type, 
CASE when (reason is null or reason = '') and type = '駁回' THEN '未填寫駁回理由' 
ELSE reason 
END reason 
from workFlow 
order by time desc; 

方法二:

SELECT id,time,type,
CASE when type = '駁回' and (reason is null or reason = '') THEN '未填寫駁回理由' 
ELSE reason 
END reason
from workFlow
order by time desc;

方法三:

SELECT id,time,type,
CASE when type = '駁回' and reason is null or reason = '' THEN '未填寫駁回理由' 
ELSE reason 
END reason
from workFlow
order by time desc;

方法四:

SELECT id,time,type,
CASE when (type = '駁回' and reason is null) or reason = '' THEN '未填寫駁回理由' 
ELSE reason 
END reason
from workFlow
order by time desc;

為什麼上面方法三, 四和方法二是一樣結果? 請大神指點 分享思路...

我的理解:方法三 先找type='駁回'的結果,再與 reason為null,空白串'' 做 ”與“判斷,所以與方法二結果一樣。

        在我預想的是兩種結果組合:條件1:type='駁回' and reason is null,  條件2: 單獨的 reason='', 而實際結果與我預想的不一樣。

        個人覺得, 1和2一樣結果,3和4是另一個一樣的結果,但與實際測試結果不一樣。事實上,上面4種方法一樣的結果。還得繼續努力呀!

方法五:

SELECT id,time,type,
CASE when reason = '' or reason  is null and type = '駁回' THEN '未填寫駁回理由' 
ELSE reason 
END reason
from workFlow
order by time desc;

方法六:

SELECT id,time,type,
CASE when reason is null or reason = '' and type = '駁回'  THEN '未填寫駁回理由' 
ELSE reason 
END reason
from workFlow
order by time desc;

我滴神,我已經暈啦。。。。

方法1,2,3,4,5結果居然一樣, 不明白方法3,4,5的結果為啥與方法1,2結果一樣。。。。55555, 個人覺得方法1,2結果一樣,方法3,4,5,6結果一樣.........

方法6符合預想的結果,能理解!

需求

當type=‘駁回’,就把為null 或 為空串 的reason 賦值為‘未填寫駁回理由’,對已填寫駁回理由,就直接返回reason; 當type為其它型別時,不需要填寫理由,所以返回結果保留reason的值,即為空。

方法一二三四五的結果如下:

方法六的結果如下: