如题:我现在有A,B两表:
A:   RYBH(人员编号)    RYSFZHM(人员身份证号码)
     12345             XXXXXX 
B:  RYXM(人员姓名)    RYSFZHM(人员身份证号码)   RYBH
     张三              XXXXXX                    (空)
如何利用RYSFZHM这个字段,将A表中的RYBH 更新到B表?
我使用  update B set rybh=(select rybh from A where A.rysfzhm=B.rysfzhm)
提示我返回值多于一条。求大神指点如何书写?

解决方案 »

  1.   

    A: RYBH(人员编号) RYSFZHM(人员身份证号码)
      12345 XXXXXX  
    主要是这个表中,人员编码与身份证号码存在重复的情况,所以报错,你看下是不是一模一样的数据呢?如果是的话
    1、update B set rybh=(select rybh from (select distinct rybh ,sfzh from a) where A.rysfzhm=B.rysfzhm)2、如果数据量比较大,可以使用右边逐条更新,但是也要保证在A表中,一个身份证号码对应一个人员编号,
    不能一个身份证号码对应2个
      

  2.   


    update B
       set rybh = (select rybh
                     from A
                    where A.rysfzhm = B.rysfzhm
                      and rownum = 1)  --加rownum=1保证不返回多条记录
     where exists (select 1 from rybh c where c.rysfzhm = b.rysfzhm) --加where条件保证只更新符合条件的数据,不进行全表更新