2016-11-30 157 views
1

我有一個表A,其中有一列D_DATE,其值爲YYYYMMDD(我不打擾日期格式)。我也碰巧有另一個表B,其中有一個列名稱V_TILL。現在,我想更新表B的V_TILL列值,其值爲表A中的D_DATE列,該列恰好也有重複值。意思是,內部查詢可以從我形成查詢的位置返回多個記錄來更新表。Oracle SQL使用另一個表的值更新一個表列

我現在有這個疑問寫,但它引發錯誤:

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

UPDATE TAB_A t1 
SET (V_TILL) = (SELECT TO_DATE(t2.D_DATE,'YYYYMMDD') 
         FROM B t2 
         WHERE t1.BR_CODE = t2.BR_CODE 
         AND t1.BK_CODE = t2.BK_CODE||t2.BR_CODE) 
WHERE EXISTS (
    SELECT 1 
    FROM TAB_B t2 
    WHERE t1.BR_CODE = t2.BR_CODE 
    AND t1.BK_CODE = t2.BK_CODE||t2.BR_CODE) 

PS:BK_CODEBK_CODE以及級聯BR_CODE

請幫助我,我陷在這個泥潭!任何幫助,將不勝感激。

+0

此返回多於一行'SELECT TO_DATE(t2.D_DATE, 'YYYYMMDD') FROM乙T2 WHERE t1.BR_CODE = t2.BR_CODE AND t1.BK_CODE = t2.BK_CODE || T2。 BR_CODE'你應該添加一些條件 –

回答

1

如果子查詢返回許多值,您想使用哪一個值?

如果有任何你可以使用rownum < = 2; 如果您知道只有一個值,使用不同的上述

SET (V_TILL) = (SELECT TO_DATE(t2.D_DATE,'YYYYMMDD') 
         FROM B t2 
         WHERE t1.BR_CODE = t2.BR_CODE 
         AND t1.BK_CODE = t2.BK_CODE||t2.BR_CODE AND ROWNUM <=1) 

SET (V_TILL) = (SELECT DISTINCT TO_DATE(t2.D_DATE,'YYYYMMDD') 
         FROM B t2 
         WHERE t1.BR_CODE = t2.BR_CODE 
         AND t1.BK_CODE = t2.BK_CODE||t2.BR_CODE) 

變通辦法。要做到這一點,你必須分析你爲什麼獲得多個價值。也許更復雜的邏輯需要選擇正確的值。

+0

什麼是DISTO_DATE? – jera

+0

複製粘貼錯誤 – arturro

0
I got it working with this command: 
MERGE INTO TAB_A A 
USING TAB_B B 
ON (A.BK_CODE = B.BK_CODE || B.BR_CODE 
AND A.BR_CODE = B.BR_CODE AND B.BR_DISP_TYPE <> '0' 
AND ((B.BK_CODE, B.BR_SUFFIX) IN (SELECT BK_CODE, 
             MIN(BR_SUFFIX) 
             FROM TAB_B 
             GROUP BY BK_CODE))) 

as mentioned earlier by many, I was missing an extra condition and got it working, otherwise the above mentioned techniques work very well. Thanks to all! 
相關問題