处理MySQL CASE语句中的空集

Ric*_*her 5 mysql null case

MySQL服务器版本5.0.45.考虑以下:

( SELECT CASE 
    WHEN t.group_id = 12 THEN 'yes' 
    ELSE 'no' 
    END
    FROM sample_table t
    WHERE t.user_id = 2
    AND t.group_id = 12 ) as foo
Run Code Online (Sandbox Code Playgroud)

这个较大语句的子查询符合我的预期,大部分时间都会产生"是"或"否"字符串值.这不是理想的,但这就是你在别人的代码上工作所得到的!

但是,有时select可以合法地返回一个空集,在这种情况下foo设置为NULL.这实际上并没有破坏应用程序,但它令人恼火.有没有办法可以保证foo总是'yes'或'no',即使表中没有匹配的行?

Qua*_*noi 6

如果它是一个标量子查询,(即你在一个SELECTWHERE子句中使用,而不是在FROM子句中使用),那么使用:

IF(
EXISTS
(
SELECT  NULL
FROM    sample_table t
WHERE   t.user_id = 2
        AND t.group_id = 12
), 'yes', 'no'
)
Run Code Online (Sandbox Code Playgroud)

甚至这个:

COALESCE(
(
SELECT  'yes'
FROM    sample_table t
WHERE   t.user_id = 2
        AND t.group_id = 12
), 'no')
Run Code Online (Sandbox Code Playgroud)