mysql - 带有 NULL 的 SQL CASE 语句

标签 mysql sql null

我有以下查询。根据http://dev.mysql.com/doc/refman/5.0/en/case.html , null=null 为假,因此第一个 case 行永远不会出现。完成此任务的替代查询是什么?

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

最佳答案

所以使用 where <condition> case 的形式:

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

此外,对字符串(和日期)常量使用单引号。不要将它们用于任何其他用途,例如引用定界符。

关于mysql - 带有 NULL 的 SQL CASE 语句,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/25096854/

相关文章:

php - PageViews、动态页面访问计数器类似于 Google Analytics 或 Alexa?

mysql - 如何在 SQL 中生成序列号从 0 到最大值的表

javascript - 如何验证 URL 中的内容 (Javascript)

java - 抛出异常或返回 null

mysql - MYSQL查询可以有多个条件吗?

php - 如何在php中动态链接页面到菜单?

python - 让 sqlalchemy 提取整个列

sql - 可互换的复合主键

sql - Oracle 中的 TO_NUMBER 函数出现奇怪的问题

pointers - 隐藏 nil 值,理解为什么 golang 在这里失败