在Derby中一次更新多个列

时间:2009-02-25 11:15:11

标签: sql derby

DB2支持以下语法:

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

即。我可以运行一个select,它返回多个列并将结果复制到目标表的各个列(要更新的列)。

Derby只允许语法:

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

这意味着当我需要以某种方式对select的结果进行分组时,我会遇到问题。有没有比将更新拆分为两个语句或在Java中循环本地(即提交数百万个UPDATE语句)更好的解决方案?

1 个答案:

答案 0 :(得分: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)

我没有说任何有关效率的内容 - 但它可能比将更新拆分为两个语句或在循环中本地执行更有效。