DB2和SQL标准在UPDATE语句中没有FROM子句.所以你必须明确地将步骤分开
.
这是一个例子:
UPDATE TABLE A
SET A.FLD_SUPV = ( SELECT B.FLD_SUPV
FROM TABLEA A, TABLEB B, TABLEC C,TABLED D
WHERE A.FLD1= B.FLD1
AND A.FLD_DT >= B.FLD_FM_DT
AND A.FLD_DT <= B.FLD_THRU_DT
AND A.FLD_DT > D.FLD_THRU_DT
AND A.FLD_DT < C.FLD_EFF_DT )
WHERE EXISTS ( SELECT B.FLD_SUPV
FROM TABLEA A, TABLEB B, TABLEC C,TABLED D
WHERE A.FLD1= B.FLD1
AND A.FLD_DT >= B.FLD_FM_DT
AND A.FLD_DT <= B.FLD_THRU_DT
AND A.FLD_DT > D.FLD_THRU_DT
AND A.FLD_DT < C.FLD_EFF_DT )
Run Code Online (Sandbox Code Playgroud)
要更新两个字段,您可以使用如下示例:
UPDATE table1 t1
SET (col1, col2) = (
SELECT col3, col4
FROM table2 t2
WHERE t1.col8=t2.col9
)
Run Code Online (Sandbox Code Playgroud)
优化器将看到SET和FROM子句中的子查询是相同的,它应该将它们合并到内部执行计划中.
对的,这是可能的.你可以尝试这样的事情:
MERGE INTO A
USING (SELECT c, d, z from B) B
ON (A.x = B.z)
WHEN MATCHED THEN
UPDATE SET A.a = A.a + B.c, A.b = A.b + B.d;
Run Code Online (Sandbox Code Playgroud)
您可以在此处阅读有关MERGE的更多信息.
| 归档时间: |
|
| 查看次数: |
73135 次 |
| 最近记录: |