2


t1(id,ref_id) and t2(ref_id,id)t2 ref_id のデータを使用して空の t1 の ref_id 列を更新する必要があるという 2 つのテーブルがあります。
t1 は

ID  REF_ID
123  
123  
124  
124  
124  
125  

t2 は

REF_ID  ID
2010    123
2011    123
2012    124
2013    125
2014    124
2015    124

そして私の出力は

123 2010
123 2011
124 2012
125 2013
124 2014
124 2015

単一の更新ステートメントでそれを行うことができますか? 私はこれを試しました

update test_01 t1 set t1.ref_id=(select * from(select t2.ref_id from test_02 t2 order by t2.id ));

しかし、結果はありません。

4

1 に答える 1

2

これを試して:

update t1
set ref_id = (select t22.ref_id
                from (select rowid ri,  id, ref_id, row_number() over (partition by id order by 1) rn 
                        from t1 ) t11 join
                     (select id, ref_id, row_number() over (partition by id order by 1) rn
                        from t2) t22 on t11.id = t22.id and t11.rn = t22.rn
             where t11.ri = t1.rowid);

ここにsqlfiddleのデモがあります

ウィンドウ関数 (row_number) を使用したので、マージを使用することを検討してください。

merge into t1 d
using (
  select t22.ref_id, t11.ri
                from (select rowid ri,  id, ref_id, row_number() over (partition by id order by 1) rn 
                        from t1 ) t11 join
                     (select id, ref_id, row_number() over (partition by id order by 1) rn
                        from t2) t22 on t11.id = t22.id and t11.rn = t22.rn  
) s
on (d.rowid = s.ri)
when matched then update set d.ref_id = s.ref_id

これは別のsqlfiddleデモです

于 2013-02-17T10:00:33.260 に答える