mysql case when多條件同時滿足的多個and組合巢狀的情況,判斷空is null --- 系列二
阿新 • • 發佈:2019-02-08
方法一:
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的值,即為空。
方法一二三四五的結果如下:
方法六的結果如下: