Выражение 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])