Подзапрос возвращает более 1 строки при выборке в операторе CASE WHEN - PullRequest
1 голос
/ 04 октября 2011

Первый запрос

Этот запрос работает нормально и движок на него не жалуется

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

Второй запрос

Этот не работает, двигатель жалуется на Subquery returns more than 1 row, когда, по мне, я делаю то же самое, когда @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;

Кто-нибудь видит, почему движок жалуется на второй запрос, если он не для первого?

Заранее спасибо,

Ответы [ 2 ]

3 голосов
/ 04 октября 2011

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;

OR

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;
0 голосов
/ 04 октября 2011

Изменить на:

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;
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...