SQL CASE表达式返回多行

时间:2014-03-24 16:01:02

标签: sql oracle oracle11gr2

我使用的游标在其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子句,其中子选择可能会返回多行?

1 个答案:

答案 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])