2009-02-25 43 views
3

DB2支持此語法:在德比一次更新多個列

UPDATE DEST D SET (AAA,BBB) = (
    SELECT MAX(Z.AAA), MAX(Z.BBB) FROM OTHER O WHERE O.ID = D.ID 
) 

即我可以運行一個選擇返回多列,並將結果複製到目標表的各列(一更新)。

德比只允許語法:

UPDATE table-Name [[AS] correlation-Name] 
    SET column-Name = Value 
    [ , column-Name = Value} ]* 
    [WHERE clause] 

這意味着我可以碰到問題時,我需要組選擇的結果以某種方式。是否有更好的解決方案,而不是將更新分成兩個語句,或者是在Java環路中進行本地化(即提交數百萬條UPDATE語句)?

回答

3

想必,你可以這樣做:

UPDATE DEST D 
    SET AAA = (SELECT MAX(Z.AAA) FROM OTHER O WHERE O.ID = D.ID), 
     BBB = (SELECT MAX(Z.BBB) FROM OTHER O WHERE O.ID = D.ID) 

我沒有說什麼效率 - 但它可能是更有效的比任何分裂更新成兩個語句或循環本地做。

+1

我擔心副作用;當select子句更復雜時,這兩個語句可能會產生不同的結果嗎? – 2009-02-26 08:06:01