以下是一个批量处理update的语句 
update xh_2 v set v.pk_psndoc = (select b.pk_psndoc from bd_psndoc b,xh_2 v where b.psncode=v.psncode); 
  把v表中的人员主键替换为b表中的人员主键,二者通过人员编码唯一性匹配,但是在执行该语句时报: 单行子查询返回多行! 
  请问各位该语句该怎么写?

解决方案 »

  1.   

     where b.psncode=v.psncode
    改为
      where b.psncode=v.psncode and rownum<2
      

  2.   

    兄弟,你的设计思路有问题,前面的可以是多条数据,但是后面不可以,如果两边都是多条数据且数据值不相同的话,oracle无法判断左边的数据要改为哪一条,在程序上是不确定的。。
    如果右边的查询返回的值不一定相同,建议根据业务逻辑再增加约束条件,使得右边的查询返回相同的值。。
      

  3.   

       也许是我没有表达清楚,也不知道我的这种思路是否能实现,我再详细的描述一下想实现的结果:         数据库中有两个表,b表是人员信息表,该表中有人员编码、人员主键、人员姓名等等;
        另外一张表V表是一个考勤表,该表中的考勤记录通过人员主键、人员编码、人员姓名跟人员信息表b可以关联上。
        我现在想通过人员编号‘psncode’字段的唯一性,将V表中的人员的人员主键全部都替换成b表中对应人员的人员主键。
      所以使用到了这样一个语句: 
           update xh_2 v set v.pk_psndoc = (select b.pk_psndoc from bd_psndoc b,xh_2 v where b.psncode=v.psncode); 
      这是一个批量操作,批量处理的过程,但是在执行时报 :单个子查询返回多个行! 无法实现想要的结果!恳求各位高手的指点!?
      

  4.   

    update xh_2 v set v.pk_psndoc = (select b.pk_psndoc from bd_psndoc b where b.psncode=v.psncode);
      

  5.   

    update xh_2 v set v.pk_psndoc = (select b.pk_psndoc from bd_psndoc b,xh_2 v where b.psncode=v.psncode); 改为:update xh_2 v set v.pk_psndoc = (select b.pk_psndoc from bd_psndoc b where b.psncode=v.psncode); 
      

  6.   

    楼主的基础知识要加强.....
             PS:CSDN上问问题都要有分才有人理会的吗?