2014-03-24 99 views
1

我與在其WHERE子句中的一個CASE表達式,像這樣一個遊標工作:SQL 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

我應該補充一點,在這裏不使用PL/SQL塊。 –

+0

您應該將'='更改爲'IN SELECT()' – 2014-03-24 16:10:15

回答

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