UPDATE dm_jk_vip_user_day_02 partition(P_dm_jk_vip_user_day_2) t SET 
t.th_days=decode(nvl(t.mou,0),0,nvl(f.th_days,0)+1,0),t.mou=nvl(t.mou,0)+nvl(f.mou,0) 
WHERE EXISTS (SELECT * FROM dm_jk_vip_user_day_02 partition(P_dm_jk_vip_user_day_1) f 
WHERE f.user_id=t.user_id)dm_jk_vip_user_day_02 为分区表,每日有60万数据进去
P_dm_jk_vip_user_day_1 和P_dm_jk_vip_user_day_2 为分区
执行提示:f.mou不存在

解决方案 »

  1.   

    改为:UPDATE dm_jk_vip_user_day_02 partition(P_dm_jk_vip_user_day_2) t
       SET (t.th_days, t.mou) = (select decode(nvl(t.mou, 0),0,nvl(f.th_days, 0) + 1,0),
                                        nvl(t.mou, 0) + nvl(f.mou, 0)
                                   from dm_jk_vip_user_day_02 partition(P_dm_jk_vip_user_day_1) f
                                  WHERE f.user_id = t.user_id)
     WHERE EXISTS (SELECT *
              FROM dm_jk_vip_user_day_02 partition(P_dm_jk_vip_user_day_1) f
             WHERE f.user_id = t.user_id)
      

  2.   

    网上看到了,这样的例子有的网友说能更加优化  UPDATE A SET 
      (COL2, COL3) = (SELECT COL1,'T' 
      FROM B WHERE B.COL1=A.COL1) 
      WHERE EXISTS 
      (SELECT B.COL1 FROM B WHERE B.COL1=A.COL1)优化成 UPDATE A SET COL2=COL1, COL3='T' 
      WHERE EXISTS 
      (SELECT B.COL1 FROM B WHERE B.COL1=A.COL1)这样写语法对么吗?