3

DB2 支持这种语法:

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

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

Derby 只允许以下语法:

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

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

4

1 回答 1

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)

我没有说任何关于效率的事情 - 但它可能比将更新分成两个语句或在本地循环执行更有效。

于 2009-02-26T06:30:13.407 回答