题
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将始终是“是”或“不”,即使有表中没有匹配行?
解决方案
如果这是一个标量子查询,然后使用此,(你在SELECT
或WHERE
子句中使用,而不是在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而不必大幅度改变你的子查询。
不隶属于 StackOverflow