Выражение SQL CASE, возвращающее несколько строк

Я работаю с курсором, который имеет выражение CASE в одном из своих WHERE-предложений, например так:

SELECT tbl.id
FROM   table1 tbl
WHERE  tbl.id = CASE
                  WHEN [some condition]
                    THEN [a single id number]
                    ELSE ( SELECT tbl2.id
                           FROM table2 tbl2
                           WHERE [some other condition]
                         )
                END

Это хорошо работает, пока суб-выбор не возвращает несколько строк. Если это происходит, генерируется исключение ORA-01427. Я пытался исправить это, используя операторы IN или ANY, но мне кажется, что выражение CASE просто не может выводить наборы с несколькими значениями.

Если возможно, как создать предложение WHERE, подобное этому, в котором дополнительный выбор потенциально может вернуть несколько строк?

1 ответ

Решение

Как вы можете сравнить tbl.id = [несколько строк]?

Вам необходимо использовать синтаксис "Exists" или " IN ". Например:

SELECT tbl.id
  FROM table1 tbl
 WHERE ( [some condition] AND tbl.id = [a single id number])
OR ( NOT [some condition] AND tbl.id IN ( SELECT tbl2.id
                                           FROM table2 tbl2
                                          WHERE [some other condition])
Другие вопросы по тегам