问题:项目中需要批量插入一个select出来的结果集,如果被插入的表里原本就有某条记录的时候不能重复插入的SQL(DB2)。
环境描述:
1)有两个表,加一些限制条件后,从tableNameB中select出一个结果集,再将其不重复地插入到tableNameA表中去。
2)tableNameB表中没有主键,三个字段A,B,C能够唯一确定一条记录。
解决方案:
1)从talbeNameB中加上限制条件后select出一个结果集。
2)将这个结果集与被插入表进行左外连接。
3)加上这三个字段相等的限制,如果关联不为null,表示被插入表中有这行记录;否则,表示tableNameA表中没有这行记录,可以进行插入操作。
参考实现:
代码如下:
insert into tableNameA
select
b.A ,b.B ,b.C ,b.D ,b.E ,b.F ,
from (
select tab.*,row_number()over(partition by tab.A,tab.B,tab.C) req --去掉重复记录
from tableNameB tab
where tab.A like 'a' --加入select的限制条件
and tab.B=1
) b
left outer join tableNameA c --左外连接
on b.A=c.A --判断tableNameA表中是否有重复的记录,三个相等条件确定唯一记录
and b.B=c.B
and b.C=c.C
where b.req=1 --在select时有重复记录,则取第一条记录
and c.A is null ;
发表评论
- 浏览: 1242 次
- 性别:

- 来自: 西安

- 详细资料
搜索本博客
最近加入圈子
最新评论
-
Open Flash Chart组件的使 ...
jFreeChart他也可以动起来的只要applet写得好动起来还是很壮观的,不 ...
-- by moon_vv -
关于在EC列表页面点击标题 ...
给个具体的做法行不行 看不懂啊
-- by itshu -
Open Flash Chart组件的使 ...
太好了!谢谢了!正好要用到这个东西!要是能再有更多的例子就更好了!
-- by jyfln1234 -
Open Flash Chart组件的使 ...
这个东东我以前看过, 但是我记得我用flash 编译一下他的源文件, 就会很大 ...
-- by dearmite






评论排行榜