简体   繁体   English

带有NULL的SQL CASE语句

[英]SQL CASE statement with NULL

I have the following query. 我有以下查询。 According to http://dev.mysql.com/doc/refman/5.0/en/case.html , null=null is false, thus the first case row will never occur. 根据http://dev.mysql.com/doc/refman/5.0/en/case.html,null null=null为false,因此第一个案例行将永远不会发生。 What would be an alternative query to accomplish this? 什么是替代查询来完成此操作?

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";

So use the where <condition> form of case : 因此,使用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';

Also, use single quotes for string (and date) constants. 另外,对字符串(和日期)常量使用单引号。 Don't use them for anything else, like quoting delimiters. 请勿将它们用于其他用途,例如引用分隔符。

An alternative would be to use COALESCE to get a default value in case the field is NULL, and then use that default for comparison where you are comparing with NULL in your present your query, like so: 另一种选择是在字段为NULL的情况下使用COALESCE获取默认值,然后在要与当前查询中的NULL比较的情况下使用该默认值进行比较,例如:

SELECT CASE COALESCE(c1,'')
WHEN '' THEN CONCAT("Hi",name," Your value is NULL")

Of course, '' may be a legitimate value on it's own, in which case you need to use another value as default. 当然,“”本身可能是合法值,在这种情况下,您需要使用其他值作为默认值。 Owing to this, I would personally recommend Gordon's solution as the way to go. 因此,我个人建议使用戈登的解决方案。

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM