从值表填充表

时间:2016-03-15 18:22:36

标签: sql oracle

我有一个较大的Oracle表(30M行),其中包含三列:IDfieldnamevalue。我需要一个查询来更新源数据中的目标表(包含93列)。因此,如果源表的第一行为1,'first_name','Robert',则会更新ID=1更新first_name列的行,其值为'Robert'

查询是否可以实现这一点,还是需要使用其他工具进行处理?

1 个答案:

答案 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');

您实际上可以将此全部写为一个查询,但处理只更新某些字段的行会变得很复杂。