有两张表cigi和cimb,
cigi结构:
-------------------------
date   status   segment1
--------------------------
2010    new       k1
2010    new       k2
2010    new       k3
cimb机构:
--------------------------
date   gl_code    k_code
--------------------------
2010    gl1         k1
2010    gl2         k2两张表通过segment和k_code关联,
现在要将第一张表cigi的segment1字段换成cimb的gl_code相应字段
第二张表cimb不存在数据就不用更新。

解决方案 »

  1.   

    select * from cigi;     date STA SEGME
    --------- --- -----
         2010 new k1
         2010 new k2
         2010 new k3select * from cimb;      date GL_ K_
    ---------- --- --
          2010 gl1 k1
          2010 gl2 k2update cigi set segment1=(select gl_code from cimb where cimb.k_code=cigi.segment1)
    where exists(select 1 from cimb where cigi.segment1=cimb.k_code);SQL> select * from cigi;      date STA SEGME
    ---------- --- -----
          2010 new gl1
          2010 new gl2
          2010 new k3
      

  2.   

    update cigi set segment1=(select gl_code from cimb where k_code=cigi.segment1) ;
      

  3.   

    为什么用一楼的方法还是同样的问题呀
    我用的是的oracle11g
      

  4.   

    --那是你一个k_code在表里有多个gl_code就提示这个错误
    --如果是对应多个gl_code你需要选择哪个?update cigi set 
    segment1=(select gl_code,row_number(order by gl_code) rn
              from cimb where cimb.k_code=cigi.segment1 and rn=1)
    where exists(select 1 from cimb where cigi.segment1=cimb.k_code);
      

  5.   

    oracle10gr2上已验证
    update cigi
       set segment1 = (SELECT gl_code FROM cimb WHERE k_code = cigi.segment1)
     where segment1 in (select k_code from cimb);----排除cimb不存在数据的情况
    commit;这个可以
      

  6.   

    答案都用了·Lz可以尝试用下  merge