ORACLE MERGE INTO语句报错,unable to get a stable set of rows in the source tables

在使用merge into语句,用一张表的数据tab2更新另一张表tab1时,如果tab1中用来匹配的字段一条在tab2中有多条对应的数据,就会报错:

ORA-30926: unable to get a stable set of rows in the source tables

merge into的使用语法

merge into tab1  
using tab2  
on(tab1.id=tab2.id)  
when matched then  
update set tab1.val = tab2.val

解决方法

可以用partition by函数对tab2中的多条字段进行排序,只取第一条来更新tab1。
举个例子,通过学生信息表stu_info来更新学生表student里的学生班级信息。同一个学生对应了不同的班级,使用partition by按创建时间排序,可以得到该学生最新的班级情况。

merge into student a 
using ( 
  select stu_id, class from 
(select t1.*,row_number() over (partition by stu_id order by create_date desc) rn from stu_info t1) t2
where rn=1) b
on (a.stu_id= b.stu_id)
  when matched then update 
 set a.class = b.class;
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

阿达斯加

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值