Warning: file_get_contents(/data/phpspider/zhask/data//catemap/8/mysql/68.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181

Warning: file_get_contents(/data/phpspider/zhask/data//catemap/1/ms-access/4.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Mysql 在CASE-when语句中进行子选择时,子查询返回多行_Mysql_Sql - Fatal编程技术网

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;