DB2和SQL标准在UPDATe语句中没有FROM子句。因此,您必须清楚地将步骤分开来
- 标识要修改的行并
- 计算新值。
。
这是一个例子:
UPDATe TABLE ASET A.FLD_SUPV = ( SELECT B.FLD_SUPVFROM TABLEA A, TABLEB B, TABLEC C,TABLED DWHERe A.FLD1= B.FLD1AND A.FLD_DT >= B.FLD_FM_DTAND A.FLD_DT <= B.FLD_THRU_DTAND A.FLD_DT > D.FLD_THRU_DTAND A.FLD_DT < C.FLD_EFF_DT )WHERe EXISTS ( SELECt B.FLD_SUPVFROM TABLEA A, TABLEB B, TABLEC C,TABLED DWHERe A.FLD1= B.FLD1AND A.FLD_DT >= B.FLD_FM_DTAND A.FLD_DT <= B.FLD_THRU_DTAND A.FLD_DT > D.FLD_THRU_DTAND A.FLD_DT < C.FLD_EFF_DT )
要更新两个字段,您可以使用如下示例:
UPDATe table1 t1 SET (col1, col2) = ( SELECT col3, col4 FROM table2 t2 WHERe t1.col8=t2.col9 )
优化器将看到SET和FROM子句中的子查询是相同的,并且应该将它们合并到内部执行计划中。



