oracle在更新表时加入深度

时间:2015-02-09 15:22:56

标签: sql oracle oracle11g oracle10g

我对Oracle有疑问。

我知道Oracle仅支持在第一个子查询级别使用别名。当我想在更新表时多次分组时,这会产生问题。

示例:我有一些服务器组和一个包含有关它们的信息的数据库。我有一个表,其中包含有关组的信息和一个表,其中我存储了时间戳(确切地说:我实际上使用了日期)组中特定服务器的工作负载。

现在,我在服务器表中遇到了一个非规范化字段的性能问题,该字段包含该组在一天内具有的最高工作负载。

我想做的是像

update server_group 
    set last_day_workload=avg(workload1)
    from (select max(workload) workload1
        from server_performance
        where server_performance.server_group_ID_fk=server_group.ID
            and time>sysdate-1
        group by server_performance.server_group_ID_fk)

虽然ID是server_group的主键,server_group_ID_fk是来自server_performance表的外键引用。到目前为止我使用的解决方案是将第一个连接写入临时表,并在下一个语句中从该临时表进行更新。有更好的方法吗?

在这个问题上它还没有这样的问题,但是如果使用临时表增加数据量不仅花费了一些时间,而且还花费了大量的RAM。

感谢您的回答!

1 个答案:

答案 0 :(得分:0)

如果我是你,我会在select语句中计算出我想要的结果,然后使用a MERGE statement进行必要的更新。