如何在DB2中的单个更新语句中更新多个列

时间:2014-03-26 12:10:06

标签: sql database db2 sql-update

我想用单个Update语句更新DB2中表的多个列。

任何提示或想法都会令人感激。感谢。

6 个答案:

答案 0 :(得分:34)

所有SQL版本中的更新语句如下所示:

update table
    set col1 = expr1,
        col2 = expr2,
        . . .
        coln = exprn
    where some condition

因此,答案是您使用逗号分隔作业,不要重复set声明。

答案 1 :(得分:5)

如果值来自另一个表, 你可能想用

 UPDATE table1 t1 
 SET (col1, col2) = (
      SELECT col3, col4 
      FROM  table2 t2 
      WHERE t1.col8=t2.col9
 )

示例:

UPDATE table1
SET (col1, col2, col3) =(
   (SELECT MIN (ship_charge), MAX (ship_charge) FROM orders), 
   '07/01/2007'
)
WHERE col4 = 1001;

答案 2 :(得分:0)

我知道这是一个老问题,但我必须找到多行更新的解决方案,其中多个记录必须根据其ID更新不同的值,我发现我可以使用标量子选择:

UPDATE PROJECT
  SET DEPTNO =
        (SELECT WORKDEPT FROM EMPLOYEE
           WHERE PROJECT.RESPEMP = EMPLOYEE.EMPNO)
  WHERE RESPEMP='000030'

(当然,WHERE是可选的)

另外,我发现指定在此更新中不会使用NULL值(如果第一个表中的所有记录都没有第二个中的相应记录),这一点至关重要,这样:

UPDATE PROJECT
  SET DEPTNO =
        (SELECT WORKDEPT FROM EMPLOYEE
           WHERE PROJECT.RESPEMP = EMPLOYEE.EMPNO)
  WHERE RESPEMP IN (SELECT EMPNO FROM EMPLOYEE)

来源:https://www.ibm.com/support/knowledgecenter/ssw_i5_54/sqlp/rbafyupdatesub.htm

答案 3 :(得分:0)

update table_name set (col1,col2,col3) values(col1,col2,col);

不是标准SQL而且不起作用 你必须使用这个 Gordon Linoff 说:

update table
    set col1 = expr1,
        col2 = expr2,
        . . .
        coln = exprn
    where some condition

答案 4 :(得分:0)

这是一个“旧学校解决方案”,当MERGE命令不起作用时(我认为在版本10之前)。

UPDATE TARGET_TABLE T 
SET (T.VAL1, T.VAL2 ) =  
(SELECT S.VAL1, S.VAL2
 FROM SOURCE_TABLE S 
 WHERE T.KEY1 = S.KEY1 AND T.KEY2 = S.KEY2)
WHERE EXISTS 
(SELECT 1  
 FROM SOURCE_TABLE S 
 WHERE T.KEY1 = S.KEY1 AND T.KEY2 = S.KEY2 
   AND (T.VAL1 <> S.VAL1 OR T.VAL2 <> S.VAL2));

答案 5 :(得分:0)

为了完整性和想要更新一行中所有列的极端情况,您可以执行以下操作,但要考虑字段的数量和类型必须匹配。

使用数据结构

exec sql UPDATE TESTFILE
         SET ROW = :DataDs
         WHERE CURRENT OF CURSOR; //If using a cursor for update

来源:rpgpgm.com

仅SQL

UPDATE t1 SET ROW = (SELECT *
                     FROM   t2
                     WHERE  t2.c3 = t1.c3)

来源:ibm.com