[英]SQL CASE statement with NULL
我有以下查詢。 根據http://dev.mysql.com/doc/refman/5.0/en/case.html,null null=null
為false,因此第一個案例行將永遠不會發生。 什么是替代查詢來完成此操作?
SELECT CASE c1
WHEN NULL THEN CONCAT("Hi",name," Your value is NULL")
WHEN "v1" THEN CONCAT("Hello ",name," The value is ",
CASE c2
WHEN "v11" THEN "bla"
WHEN "v12" THEN "bla bla"
END
,")")
WHEN "v2" THEN CONCAT("Howdy there ",name," Yep, the value is ",
CASE c3
WHEN "v21" THEN "beebop"
WHEN "v22" THEN "bopbee"
END
,")")
END
AS myLabel
FROM mytable
WHERE bla="bla";
因此,使用case
的where <condition>
形式:
SELECT CASE WHEN c1 is NULL THEN CONCAT('Hi', name, ' Your value is NULL')
WHEN c1 = 'v1'
THEN CONCAT('Hello ', name, ' The value is ',
(CASE WHEN c2 = 'v11' THEN 'bla'
WHEN c2 = 'v12' THEN 'bla bla'
END), ')'
)
WHEN c1 = 'v21
THEN CONCAT('Howdy there ', name, ' Yep, the value is ',
(CASE WHEN c3 = 'v21' THEN 'beebop'
WHEN c3 = 'v22' THEN 'bopbee'
END), ')'
)
END
FROM mytable
WHERE bla = 'bla';
另外,對字符串(和日期)常量使用單引號。 請勿將它們用於其他用途,例如引用分隔符。
另一種選擇是在字段為NULL的情況下使用COALESCE
獲取默認值,然后在要與當前查詢中的NULL比較的情況下使用該默認值進行比較,例如:
SELECT CASE COALESCE(c1,'')
WHEN '' THEN CONCAT("Hi",name," Your value is NULL")
當然,“”本身可能是合法值,在這種情況下,您需要使用其他值作為默認值。 因此,我個人建議使用戈登的解決方案。
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.