mysql - 在 CASE WHEN 语句中进行子选择时,子查询返回多于 1 行

标签 mysql sql

第一次查询

这个查询工作正常,引擎没有提示

SELECT id 
FROM agencies
WHERE id IN ((SELECT id FROM agencies))
ORDER BY id;

第二次查询

这个不起作用,引擎提示 子查询返回超过 1 行,当 - 根据我的说法 - 当 @param_1 IS 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;

SELECT id 
FROM agencies
WHERE id IN (SELECT id FROM agencies)
     AND @param_1 IS NULL
UNION ALL
SELECT id 
FROM agencies
WHERE @param_1 IS NOT NULL AND id = 1
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;

关于mysql - 在 CASE WHEN 语句中进行子选择时,子查询返回多于 1 行,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/7645460/

相关文章:

SQL 计算某个值的出现次数

Mysql 从复杂结果中选择随机行

java - 更新由 symmetricds 同步的表

javascript - 我想将可更改的数据存储在表行的一列中

MySQL:有没有办法从结果中消除重复的条目

mysql - 使用游标的过程循环中出错

sql - 有没有办法自动化执行一系列SQL处理脚本?

mysql - 同时批量插入父/子

python - 我应该在应用程序中使用复杂的 SQL 查询还是处理结果?

mysql - 获取与邮政编码相关的所有城市