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 语句)更好的解决方案?
最佳答案
据推测,你可以这样做:
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)
我没有说任何关于效率的事情——但它可能比将更新分成两个语句或在本地循环执行更有效。
关于sql - 在 Derby 中一次更新多个列,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/585620/