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这个他报单行子查询返回多于一行 有怎么解决它
在确保逻辑一定正确的情况下,可以加个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
看你如何取email相同时email_password的值了
set t.emailpassowrd = (select a.email_password
from XGS_CHANGE_EMAIL a
where a.email = t.email where rownum = 1)
where t.id >= 16000
这里的update只能用单记录的select子句来进行update,所以必须保证子句的结果集最多只能1条,而且你这样的update,如果有子查询不能匹配的话,会把emailpassowrd update成 空的。