5

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

这个较大语句的子查询按我的预期工作,大部分时间产生一个“是”或“否”字符串值。这并不理想,但这就是你处理别人的代码所得到的!

但是,有时 select 可以合法地返回一个空集,在这种情况下 foo 被设置为 NULL。这实际上并没有破坏应用程序,但它很烦人。有没有一种方法可以保证 foo 始终为“是”或“否”,即使表中没有匹配的行?

4

2 回答 2

6

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

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

甚至这个:

COALESCE(
(
SELECT  'yes'
FROM    sample_table t
WHERE   t.user_id = 2
        AND t.group_id = 12
), 'no')
于 2009-08-20T14:42:30.680 回答
0

如果您希望空集表示“否”情况,您可以这样做:

select ... where ... (foo = 'no' or foo is null)

这将处理这两种情况,而不必彻底改变您的子查询。

于 2009-08-20T14:40:36.207 回答