我使用的游标在其WHERE子句之一中有一个CASE表达式,如下所示:
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子句,其中子选择可能会返回多行?
答案 0 :(得分:1)
如何比较tbl.id = [多行]?
您需要使用“存在”或“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])