0

誰でもこの問題を解決するのを手伝ってくれますか

テーブル名:RW_LN

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

私の更新クエリは次のとおりです。

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)      

私の期待される結果は次のとおりです。

     LN_ID           RE_LN_ID  
     LN001            LN003  
     LN002            LN004  
     LN003            LN002  
     LN004            LN003  

この上記のクエリは、次のようなエラーを示しています。これSUB QUERY RETURNS MULTIPLE ROWSに対する解決策を提供できる人はいますか。

4

3 に答える 3

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を参照してください

ただし、LN_ID LN002 に LN001 ではなく LN004 を (新しい RE_LN_ID として) 選択した理由を説明する必要があります (両方を選択できるため)。

于 2013-05-29T15:18:51.943 に答える
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
于 2013-05-29T14:57:13.470 に答える