sql - 在 Derby 中一次更新多个列

标签 sql derby

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/

相关文章:

java.sql.SQLDataException : An attempt was made to get a data value of type 'BOOLEAN' from type 'DATE' 异常

jdbc - Java DB(Derby)中不区分大小写的搜索

java - 我在 Mac 上安装的 Java 11 中的 derby.jar 文件在哪里?

mysql - 我需要获取一个表中每 3 条记录的平均值,并更新单独表中的列

mysql - SQL:查询格式化

php - SQL语法错误;检查与您的 MariaDB 服务器版本对应的手册以了解正确的语法

java - ClassNotFoundException:derby ClientDriver(Spring MVC + Hibernate JPA)

java - 对于少量信息,java 文件 i/o 或 derby 哪个更快?

mysql - sql子查询解释

java - 从 java 中的结果集中返回 arraylist 的 arraylist