select a.mp_id    mp_id,
       a.org_no   mp_org,
       b.org_no   meter_org,
       b.meter_id meter_id,
       d.cons_no  cons_no
  from c_mp a, c_meter b, c_meter_mp_rela c, c_cons d
 where a.mp_id = c.mp_id
   and b.meter_id = c.meter_id
   and a.cons_id = d.cons_id
   and a.org_no <> b.org_no;如果length(a.org_no)>length(b.org_no)的话,则更新C_METER里面的ORG_NO更新成C_MP的ORG_NO,这个批量更新语句该怎么写

解决方案 »

  1.   

    看看这个,这边没有具体的表,没法实测UPDATE C_METER B
       SET B.ORG_NO = NVL((SELECT A.ORG_NO
                            FROM C_MP A, C_METER_MP_RELA C
                           WHERE A.MP_ID = C.MP_ID
                             AND C.METER_ID = B.METER_ID
                             AND LENGTH(A.ORG_NO) > LENGTH(B.ORG_NO)),
                          B.ORG_NO)
      

  2.   

    merge into c_meter b
    using (select  a.org_no , c.meter_id
             from c_mp a, c_meter_mp_rela c
            where a.mp_id = c.mp_id) a
    on b.meter_id = a.meter_id
    when matched then
      update set b.org_no = a.org_no where length(a.org_no) > length(b.org_no)