update table1 a set col1=(select b.col1 from table2 b where a.id=b.id) where a.id=b.id
update table1 a set col1=(select b.col1 from table2 b where a.id=b.id) where a.id=b.id由于b在子查询内部,所以不能识别,这行不通的
加一个exists条件就行了。UPDATE RPT_MONTH_SUM SET (RPT_MONTH_SUM.USE_M, RPT_MONTH_SUM.USE_1_M, RPT_MONTH_SUM.USE_2_M, RPT_MONTH_SUM.USE_3_M, RPT_MONTH_SUM.USE_4_M, RPT_MONTH_SUM.USE_5_M, RPT_MONTH_SUM.USE_6_M)= (SELECT TEMPRPT_MONTH_SUM03.USE_M, TEMPRPT_MONTH_SUM03.USE_1_M, TEMPRPT_MONTH_SUM03.USE_2_M, TEMPRPT_MONTH_SUM03.USE_3_M, TEMPRPT_MONTH_SUM03.USE_4_M, TEMPRPT_MONTH_SUM03.USE_5_M, TEMPRPT_MONTH_SUM03.USE_6_M FROM TEMPRPT_MONTH_SUM03 WHERE RPT_MONTH_SUM.OFAGENT=TEMPRPT_MONTH_SUM03.OFAGENT AND RPT_MONTH_SUM.AREA=TEMPRPT_MONTH_SUM03.AREA AND RPT_MONTH_SUM.SUMMONTH=TEMPRPT_MONTH_SUM03.SUMMONTH AND RPT_MONTH_SUM.CHARGETYPE=TEMPRPT_MONTH_SUM03.CHARGETYPE) where exists ( select 1 from TEMPRPT_MONTH_SUM03 where RPT_MONTH_SUM.OFAGENT=TEMPRPT_MONTH_SUM03.OFAGENT AND RPT_MONTH_SUM.AREA=TEMPRPT_MONTH_SUM03.AREA AND RPT_MONTH_SUM.SUMMONTH=TEMPRPT_MONTH_SUM03.SUMMONTH AND RPT_MONTH_SUM.CHARGETYPE=TEMPRPT_MONTH_SUM03.CHARGETYPE ) ;
update table
set
col=(select ...)
...
where ...
但OFAGENT,AREA,SUMMONTH,CHARGETYPE
不唯一
现在看来是因为update没有限制条件,怎样实现呢?抛开上面的算法不管,先看下面要求,重新思考
我要更新一个表(多个需要更新字段),数据来源于另一个数据表,这两个表通过几个字段相连,两个表连接得到一组数据,然后用这组数据去更新
set col1=(select b.col1 from table2 b where a.id=b.id)
where a.id=b.id
set col1=(select b.col1 from table2 b where a.id=b.id)
where a.id=b.id由于b在子查询内部,所以不能识别,这行不通的
SET (RPT_MONTH_SUM.USE_M,
RPT_MONTH_SUM.USE_1_M,
RPT_MONTH_SUM.USE_2_M,
RPT_MONTH_SUM.USE_3_M,
RPT_MONTH_SUM.USE_4_M,
RPT_MONTH_SUM.USE_5_M,
RPT_MONTH_SUM.USE_6_M)=
(SELECT
TEMPRPT_MONTH_SUM03.USE_M,
TEMPRPT_MONTH_SUM03.USE_1_M,
TEMPRPT_MONTH_SUM03.USE_2_M,
TEMPRPT_MONTH_SUM03.USE_3_M,
TEMPRPT_MONTH_SUM03.USE_4_M,
TEMPRPT_MONTH_SUM03.USE_5_M,
TEMPRPT_MONTH_SUM03.USE_6_M
FROM TEMPRPT_MONTH_SUM03
WHERE
RPT_MONTH_SUM.OFAGENT=TEMPRPT_MONTH_SUM03.OFAGENT
AND RPT_MONTH_SUM.AREA=TEMPRPT_MONTH_SUM03.AREA
AND RPT_MONTH_SUM.SUMMONTH=TEMPRPT_MONTH_SUM03.SUMMONTH
AND RPT_MONTH_SUM.CHARGETYPE=TEMPRPT_MONTH_SUM03.CHARGETYPE)
where exists ( select 1 from TEMPRPT_MONTH_SUM03
where
RPT_MONTH_SUM.OFAGENT=TEMPRPT_MONTH_SUM03.OFAGENT
AND RPT_MONTH_SUM.AREA=TEMPRPT_MONTH_SUM03.AREA
AND RPT_MONTH_SUM.SUMMONTH=TEMPRPT_MONTH_SUM03.SUMMONTH
AND RPT_MONTH_SUM.CHARGETYPE=TEMPRPT_MONTH_SUM03.CHARGETYPE ) ;