update??

fuyou001 2009-09-01 09:59:49

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

这个他报单行子查询返回多于一行
有怎么解决它



...全文
86 4 打赏 收藏 转发到动态 举报
写回复
用AI写文章
4 条回复
切换为时间正序
请发表友善的回复…
发表回复
inthirties 2009-09-01
  • 打赏
  • 举报
回复
[Quote=引用楼主 fuyou001 的回复:]
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

这个他报单行子查询返回多于一行
有怎么解决它



[/Quote]

这里的update只能用单记录的select子句来进行update,所以必须保证子句的结果集最多只能1条,

而且你这样的update,如果有子查询不能匹配的话,会把emailpassowrd update成 空的。
cosio 2009-09-01
  • 打赏
  • 举报
回复
说明,两个表有重复的mail值,对应的PASSWD不唯一,导致更新不了!

可以用楼上的办法来解决!
inthirties 2009-09-01
  • 打赏
  • 举报
回复


在确保逻辑一定正确的情况下,可以加个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
小灰狼W 2009-09-01
  • 打赏
  • 举报
回复
a表中email字段不唯一
看你如何取email相同时email_password的值了

17,377

社区成员

发帖
与我相关
我的任务
社区描述
Oracle 基础和管理
社区管理员
  • 基础和管理社区
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
暂无公告

试试用AI创作助手写篇文章吧