update xgs_register t
   set t.emailpassowrd = (select a.email_password
                            from XGS_CHANGE_EMAIL a
                           where a.email = t.email)
 where t.id >= 16000这个他报单行子查询返回多于一行
有怎么解决它

解决方案 »

  1.   

    a表中email字段不唯一
    看你如何取email相同时email_password的值了
      

  2.   

    在确保逻辑一定正确的情况下,可以加个rownum = 1 把其他记录去掉如update xgs_register t 
      set t.emailpassowrd = (select a.email_password 
                                from XGS_CHANGE_EMAIL a 
                              where a.email = t.email where rownum = 1) 
    where t.id >= 16000 
      

  3.   

    说明,两个表有重复的mail值,对应的PASSWD不唯一,导致更新不了!可以用楼上的办法来解决!
      

  4.   


    这里的update只能用单记录的select子句来进行update,所以必须保证子句的结果集最多只能1条,而且你这样的update,如果有子查询不能匹配的话,会把emailpassowrd update成 空的。