当前位置:首页 > 开发 > 数据库 > 正文

批量插入一个select出来的结果集,如果被插入的表里原本有某条记录时就不重复插入的SQL(DB2)

发表于: 2008-05-04   作者:crabdave   来源:转载   浏览次数:
摘要: 问题:项目中需要批量插入一个select出来的结果集,如果被插入的表里原本就有某条记录的时候不能重复插入的SQL(DB2)。 环境描述:1)有两个表,加一些限制条件后,从tableNameB中select出一个结果集,再将其不重复地插入到tableNameA表中去。2)tableNameB表中没有主键,三个字段A,B,C能够唯一确定一条记录。 解决方案:1)从talbeNameB中加上限制条件

问题:项目中需要批量插入一个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 ;

 

备注:oracle中将row_number()换成rownumber()

          partition by 是按照某个字段,把表数据平均分配到几个节点上

批量插入一个select出来的结果集,如果被插入的表里原本有某条记录时就不重复插入的SQL(DB2)

  • 0

    开心

    开心

  • 0

    板砖

    板砖

  • 0

    感动

    感动

  • 0

    有用

    有用

  • 0

    疑问

    疑问

  • 0

    难过

    难过

  • 0

    无聊

    无聊

  • 0

    震惊

    震惊

编辑推荐
对于一些数据量较大的系统,数据库面临的问题除了查询效率低下,还有就是数据入库时间长。特别像报
详细内容见原文,地址:http://tech.uc.cn/?p=634 摘要: 1. 一条SQL语句插入多条数据。 2. 在事务
对于一些数据量较大的系统,数据库面临的问题除了查询效率低下,还有就是数据入库时间长。特别像报
比较一下下面两种方式的区别 1,每Add一次 就savechange() static void Main(string[] args) { //Lis
奋斗的小鸟——dogxuefeng Entity Framework 批量插入很慢 Entity Framework 批量插入很慢吗?我自
使用Mybatis批量主要是提高数据访问效率,减少数据与数据库交互时间。但是Mybatis的批量支持注解形
插入数据量大概是180条,如果要一条一条插入将要执行180条sql语句,如果按每次30条记录批量插入只需
以往记得Mysql的命令端可以批量插入或者批量更新数据库。 今天记下PL/SQL Deverloper 实现批量数据
一般如果要插入100万条数据,则会写如下代码: package org.xiazdong.test; import junit.framework
一般如果要插入100万条数据,则会写如下代码: package org.xiazdong.test; import junit.framework
版权所有 IT知识库 CopyRight © 2009-2015 IT知识库 IT610.com , All Rights Reserved. 京ICP备09083238号