簡體   English   中英

帶有NULL的SQL CASE語句

[英]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";

因此,使用casewhere <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.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM