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

较大语句的这种子查询工作方式,我期望,产生一个“是”或“否”的字符串的大部分时间价值。它的效果并不理想,但是这就是你对别人的代码工作!

但是,有时选择可以合法地返回一个空的组,在这种情况下,FOO被设定为NULL。这实际上不中断应用程序,但它的刺激性。有没有一种方法,我可以保证,foo将始终是“是”或“不”,即使有表中没有匹配行?

有帮助吗?

解决方案

如果这是一个标量子查询,然后使用此,(你在SELECTWHERE子句中使用,而不是在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')

其他提示

如果你想空集来表示“无”的情况下,你也许可以做到这一点,而不是:

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

这将同时处理casees而不必大幅度改变你的子查询。

许可以下: CC-BY-SA归因
不隶属于 StackOverflow
scroll top