日期:2014-05-17  浏览次数:20777 次

求大神指点SQL语句。。。
如题:我现在有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)
提示我返回值多于一条。。。。求大神指点。。。如何书写?

------解决方案--------------------
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个
------解决方案--------------------
SQL code

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条件保证只更新符合条件的数据,不进行全表更新

------解决方案--------------------
肯定是身份证号码重复了 这个怎么会重复呢 难道不是唯一? 如果身份证号码重复 人员姓名也会重复吧 其他信息呢 ?