我有一个较大的Oracle表(30M行),其中包含三列:ID
,fieldname
,value
。我需要一个查询来更新源数据中的目标表(包含93列)。因此,如果源表的第一行为1,'first_name','Robert'
,则会更新ID=1
更新first_name
列的行,其值为'Robert'
。
查询是否可以实现这一点,还是需要使用其他工具进行处理?
答案 0 :(得分:1)
嗯。您可以使用查询执行此操作。我建议在id, fieldname, value
的第一个表上构建索引,然后运行93次以下更新:
update targettable tt
set field1 = (select max(value) from sourcetable st where st.id = tt.id and st.fieldname = 'field1')
where exists (select 1 from sourcetable st where st.id = tt.id and st.fieldname = 'field1');
您实际上可以将此全部写为一个查询,但处理只更新某些字段的行会变得很复杂。