关于merge into 的使用
上一篇 /
下一篇 2008-01-18 18:31:34
/ 个人分类:经验心得
merge into 的用法如下:
merge into t_AAA a
using (select t.id, t.time from t_BBB t) b
on (a.id=b.id)
when matched then
update set a.last_time=b.time where b.time>a.last_time
when not matched then
insert (id, last_time)
values(b.id, b.time);
其中:id列在表t_AAA中具有唯一约束
这里要说的是这种情况:
当select t.id, t.time from t_BBB t在id列上有重复值时,例如结果集如下
id time
123 2008-1-18 15:26
345 2008-1-18 12:26
123 2008-1-18 16:26
时,上述的merge into 语句将出现违反唯一约束的错误。
解决的办法有两个:
第一,将select t.id, t.time from t_BBB t结果集用游标来循环,每次循环merge一次。
第二,将结果集里面在id列上重复的记录去掉,可以用下面的办法:
select id, time from
(select t.id, t.time, row_number() over (partition by t.id order by t.time) rn
from t_BBB t)
where rn=1
这样就可以保证不出现违反唯一约束的情况。当然,上面的两个办法里面都需要考虑null会不会导致id列上的产生重复记录。
相关阅读:
- 网格:统一管理,按需分配 (chenqilong, 2007-12-19)
- 学习笔记一:oracle体系结构组件 (focus.world, 2007-12-20)
- Oracle数据库的物理结构简介 (chenqilong, 2007-12-20)
- 监控当前数据库用户在运行什么sql语句 (ysfabm, 2007-12-22)
- oracle 学习之路 (转载) (sj04620118, 2007-12-31)
- Oracle 的入门心得(转载) (sj04620118, 2007-12-31)
- 逻辑数据库结构概述 (chenqilong, 2008-1-03)
- Oracle是怎样工作的 (chenqilong, 2008-1-04)
- 使用Oracle可传输表空间的特性复制数据(1)基础概念 (junsansi, 2008-1-08)
- [原创]Oracle ERP展开BOM结构树的SQL (ysfabm, 2008-1-15)
导入论坛
引用链接
收藏
分享给好友
推荐到圈子
管理
举报
TAG:
oracle
merge
into
唯一约束