我想用单个Update语句更新DB2中表的多个列。
任何提示或想法都会令人感激。感谢。
答案 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