0
我有一個關於Oracle的問題。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。
謝謝你的回答!
謝謝你的評論。我遇到的問題是,我首先實現解決方案,然後在大桌子上再次加入條件(就像我現在正在使用臨時表一樣)。即使它是一個精確的加入,它需要一些時間來執行它(通常沒關係,因爲非sematic PK的索引足夠小以保持緩衝)。如果PK指數會很大以保持緩衝,那將是完全瘋狂的。 – cautch 2015-02-16 14:54:11
如果您想每天更新此字段不僅一次,而且當另一列current_monitored發生更改時觸發器還會更新?計算整個表格以將單一行合併到實際表格中將是一項完全浪費。 – cautch 2015-02-16 14:58:17
雖然您的原始示例並不是特別清楚,但很難就最佳操作方式向您提供建議。也許如果你想用你創建的表格腳本(包括約束和索引)來更新你的問題,並且使用樣例數據(作爲插入語句)以及預期的輸出,我們可以幫助你更好。 – Boneist 2015-02-16 14:58:28