我有一个关于甲骨文的问题。
我知道Oracle只支持在第一个子查询级别使用别名。当我想在更新表的时候进行多次分组时,这会带来问题。
例如:我有一些服务器组和一个包含有关它们的信息的数据库。我有一个表,其中包含有关组的信息,还有一个表,其中存储了组中特定服务器的工作负载的时间戳(准确地说:我实际上使用了date )。
现在,为了解决性能问题,我在服务器表中设置了一个非规范化字段,其中包含组在一天内拥有的最高工作负载。
我想要做的事情是
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。
感谢您的回答!
发布于 2015-02-09 23:34:27
如果我是您,我会在select语句中计算出我想要的结果,然后使用a MERGE statement进行必要的更新。
https://stackoverflow.com/questions/28413144
复制相似问题