Mysql 在CASE-when语句中进行子选择时,子查询返回多行
第一次查询 此查询工作正常,引擎不会对此进行投诉Mysql 在CASE-when语句中进行子选择时,子查询返回多行,mysql,sql,Mysql,Sql,第一次查询 此查询工作正常,引擎不会对此进行投诉 SELECT id FROM agencies WHERE id IN ((SELECT id FROM agencies)) ORDER BY id; 第二次查询 这一个不起作用,引擎抱怨子查询返回的行数超过1行,而根据我的说法,当@param_1为NULL时,我正在做完全相同的事情 SELECT @param_1 := NULL, SELECT id FROM agencies WHERE id IN (CASE WHEN @p
SELECT id
FROM agencies
WHERE id IN ((SELECT id FROM agencies))
ORDER BY id;
第二次查询
这一个不起作用,引擎抱怨子查询返回的行数超过1行
,而根据我的说法,当@param_1为NULL时,我正在做完全相同的事情
SELECT
@param_1 := NULL,
SELECT id
FROM agencies
WHERE id IN (CASE WHEN @param_1 IS NULL THEN (SELECT id FROM agencies) ELSE 1 END )
ORDER BY id;
有人知道为什么引擎抱怨第二个查询而不是第一个查询吗
提前感谢,CASE需要一个标量的单个值。不是一个记录集
SELECT id
FROM agencies
WHERE id IN (
SELECT id FROM agencies WHERE @param_1 IS NULL
UNION ALL
SELECT 1 WHERE @param_1 IS NOT NULL
)
ORDER BY id;
或
另一种选择是使用IF
IF @param_1 IS NULL
SELECT id
FROM agencies
WHERE id IN (SELECT id FROM agencies)
ORDER BY id;
ELSE
SELECT id
FROM agencies
WHERE id = 1
ORDER BY id;
改为:
SELECT id
FROM agencies
WHERE id IN (
SELECT id
FROM agencies
WHERE @param_1 IS NULL
UNION ALL
SELECT 1 as id
WHERE @param_1 IS NOT NULL
)
ORDER BY id;
啊,比我快了11秒!至少我很高兴我们得到了相同的答案。lol.UNION会更好,因为它是一个二进制选择。当然,这对乐观主义者来说可能并不重要,但这不会伤害Cheers@gbn没有想到这一点!
SELECT id
FROM agencies
WHERE id IN (
SELECT id
FROM agencies
WHERE @param_1 IS NULL
UNION ALL
SELECT 1 as id
WHERE @param_1 IS NOT NULL
)
ORDER BY id;