2014-11-06 35 views
-2
一行

我使用case語句和子查詢創建一個視圖,它被執行,並顯示埃羅ORA-01427:單行子查詢返回不止

ORA-01427 "single-row subquery returns more than one row" 

我怎麼能只返回一行來解決它?

CREATE OR REPLACE FORCE VIEW AAAA("BB", "CC") AS 
SELECT T1.C1, 
CASE WHEN T2.C1='RED' THEN (SELECT COLOR_RED FROM T1) 
    WHEN T2.C1='GREEN' THEN (SELECT COLOR_GREEN FROM T1) 
    WHEN T2.C1='BLUE' THEN (SELECT COLOR_BLUE FROM T1) 
ELSE NULL END 
FROM T1, T2; 
+0

'... THEN color_red'等 – Mihai 2014-11-06 15:00:15

回答

0

更改您的查詢以使用IN或ANY與您的子查詢結果。

+0

謝謝,但究竟如何? – HUNTERAKISHOU 2014-11-06 15:24:15

0

導致編譯/運行時異常的編碼錯誤是,您正在執行內聯子查詢,該內聯子查詢必須只返回一個值才能工作,但表(T1)中有多於一行。您的子查詢必須在主鍵或列值的唯一索引組合上具有WHERE子句,否則T1表不能包含多行。 另外,你是否打算將T1中的每一行與T2中的每一行進行組合和相乘?您的SELECT語句不包含連接條件。如果T1包含1,000行,T2包含2,000行,那麼您的視圖將返回2,000,000條記錄。 Google'SQL Cartesian Product'或'SQL Cross Join'。