3

共通キーを使用して、あるテーブルを別のテーブルのデータで更新する

create table table1 (
  id varchar2(4),
  name varchar2(10),
  desc_ varchar2(10)
)


create table table2 (
  id varchar2(4),
  id_new varchar2(4)
)

insert into table1 values('1111', 'a', 'abc')
insert into table1 values('2222', 'b', 'def')
insert into table1 values('3333', 'c', 'ghi')
insert into table1 values('4444', 'd', 'jkl')

insert into table2 values('1111', '8080')
insert into table2 values('2222', '9090')

merge into table1 t1
using (select * from table2) t2
on (t1.id = t2.id)
when matched then update set t1.id = t2.id_new

エラー: ORA-27432: チェーンのステップが存在しません。

4

2 に答える 2

2

これはうまくいくはずです:

update table1 t1
set id = coalesce((
  select id_new
  from table2 t2
  where t1.id = t2.id), id);

を使用した代替アプローチを次に示しmergeます。

merge into table1 t1
using (select * from table2) t2
on (1 = 1)
when matched then update set t1.id = t2.id_new where t1.id = t2.id
于 2013-10-09T03:06:00.107 に答える
1

おそらく、以下を使用して得られる最高の速度:

merge into table1 t1
using (select t1.rowid rw, t2.id_new 
       from table2 t2 
       join table1 on (table1.id = t2.id)
       ) s
on t1.rowid = s.rowid
when matched then update set t1.id = s.id_new;

ただし、オプティマイザーに依存します(CBOがあなたの欲求を直観する場合、以前の回答は良い動作をする可能性があります)

于 2013-10-15T11:44:17.020 に答える