2009-02-25 45 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