UPDATE RPT_TEMP_DATA C SET DESP =(select A.REGION_NAME from CCTD.REGION_CODE A,CCTD.CONTRACTN_ITEM B WHERE A.REGION_UNITCODE=B.REGION_UNITCODE AND C.D8=A.REGION_UNITCODE)

解决方案 »

  1.   

    select A.REGION_NAME from CCTD.REGION_CODE A,CCTD.CONTRACTN_ITEM B WHERE A.REGION_UNITCODE=B.REGION_UNITCODE AND C.D8=A.REGION_UNITCODE
    先看这条语句返回是什么结果?
      

  2.   

    UPDATE RPT_TEMP_DATA C SET DESP =(select A.REGION_NAME from CCTD.REGION_CODE A,CCTD.CONTRACTN_ITEM B WHERE A.REGION_UNITCODE=B.REGION_UNITCODE AND C.D8=A.REGION_UNITCODE)
    作为更新列的子查询不能返回多行值,既然你Update的值只会来源于CCTD.REGION_CODE,为何又要JOIN到CCTD.CONTRACTN_ITEM,如果CCTD.REGION_CODE对CCTD.CONTRACTN_ITEM为1:N的关系,那么结果显然会发散.正确的方法是
    UPDATE (SELECT DESP,REGION_NAME RPT_TEMP_DATA A,CCTD.REGION_CODE B,CCTD.CONTRACTN_ITEM C WHERE A.D8=A.REGION_UNITCODE AND A.REGION_UNITCODE=B.REGION_UNITCODE) X
    SET X.DESP=REGION_NAME
    或者你能保证子查询能返回单行值的写法