2013-05-29 197 views
-1

使用選擇查詢與多行的任何一個可以請幫我解決這個問題更新在甲骨文

表名:RW_LN

LN_ID  RE_LN_ID  RE_PR_ID 
    LN001  RN001  RN002 
    LN002  RN002  RN003 
    LN003  RN003  RN001 
    LN004  RN001  RN002 

MY更新查詢是:

update table RW_LN set RE_LN_ID=(
    select LN_ID 
    from RW_LN as n1,RW_LN as n2 
    where n1.RE_LN_ID = n2.RE_PR_ID)  

MY預期結果是:

 LN_ID   RE_LN_ID 
    LN001   LN003 
    LN002   LN004 
    LN003   LN002 
    LN004   LN003 

這上面的查詢顯示錯誤的SUB QUERY RETURNS MULTIPLE ROWS。可任何一個提供這種解決方案,我是初學者在甲骨文9i.So停留在邏輯

+0

更新後請顯示你想要的結果,導致你的查詢沒有多大幫助。 –

+0

hI請參考我的預期結果格式,感謝 – Sajini

+0

所以問題是:LN002有RE_LN_ID:RN002,它可能與LN001或LN004中的RE_PR_ID有關。你爲什麼選擇LN004(這是有用的建立查詢) –

回答

0

,你可以嘗試用distinct

update table RW_LN set RE_LN_ID=( 
     select distinct LN_ID 
     from RW_LN as n1,RW_LN as n2 
     where  n1.RE_LN_ID = n2.RE_PR_ID) 

解決這個如果仍然返回多行,則意味着您在某處丟失了連接,或者可能有需要使用主鍵的錯誤模式。

0

只是猜測,但可能這是你想要的。

update 
    RW_LN n1 
set 
    RE_LN_ID=( 
    select n2.LN_ID 
    from RW_LN n2 
    where n1.RE_LN_ID = n2.RE_PR_ID) 
where exists (
    select null 
    from RW_LN n2 
    where n1.RE_LN_ID = n2.RE_PR_ID and 
      n2.ln_id is not null) 

目前沒有在子查詢返回要更新的行和值之間沒有相關性。

查詢內容如下:

For every row in RW_LN change the value of RE_LN_ID to be: 
    the value of LN_ID in a row in RW_LN for which: 
    the RE_PR_ID equals the original tables value of RE_LN_ID 
IF there exists at least one row in RW_LN for which: 
    RE_PR_ID is the same as RE_LN_ID in the original table AND 
    LN_ID is not null 
+0

更新了查詢 –

0

如果你想利用 「最大」 對應的LN_ID,你可以做

update RW_LN r1 
set r1.RE_LN_ID = (select MAX(LN_ID) 
       FROM RW_LN r2 
       where r1.RE_LN_ID = r2.RE_PR_ID); 

SqlFiddle

但你應該解釋爲什麼你選擇(作爲新的RE_LN_ID)LN004而不是LN001 LN_ID LN002(因爲你可以選擇兩者)