`
crabdave
  • 浏览: 1274983 次
  • 性别: Icon_minigender_1
  • 来自: 北京
社区版块
存档分类
最新评论

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

阅读更多

问题:项目中需要批量插入一个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 是按照某个字段,把表数据平均分配到几个节点上

分享到:
评论

相关推荐

    MySQL根据某一个或者多个字段查找重复数据的sql语句

    sql 查出一张表中重复的所有记录数据 1.表中有id和name 两个字段,查询出name重复的所有数据 select * from xi a where (a.username) in (select username from xi group by username having count(*) > 1) 2、...

    mybatis 批量插入 嵌套select.pdf

    mybatis 批量插入 嵌套select

    Sqlite数据库里插入数据的条数上限是500

    原来一次性向数据库里插入数据的条数不能太多,上限是500条。超出会报错。 解决方案就是只好分多次插入数据库了。 您可能感兴趣的文章:SQLite教程(八):命令行工具介绍SQLite教程(十二):锁和并发控制详解...

    insert和select结合实现”插入某字段在数据库中的最大值+1″的方法

    本文是mysql 数据库 问题一 将表一的数据导入表二...在表中插入数据时,某一字段取数据库中该字段的最大值,并+1,这个问题很多人都说用存储过程什么的解决,其实使用insert 和 select 结合就可以很好的解决这个问题啊

    DB2 日期数据库的sql语句

    自己总结的关于 db2数据库当前日期和前一天日期的sql语句

    用SQL批量插入数据的存储过程

    循环插入: 代码如下: DECLARE @MyCounter INT SET @MyCounter = 0 /*设置变量*/ WHILE (@MyCounter < 2) /*设置循环次数*/ BEGIN WAITFOR DELAY ‘000:00:10’ /*延迟时间10秒*/ INSERT INTO time_by_day (time_...

    支持批量插入的Delphi数据输入程序.rar

    支持批量插入的Delphi数据输入程序,配合数据实现的数据批量输入程序,程序的原型是一个学生管理程序,用来输入学生的基本信息,本程序添加了批量插入数据的功能,可看作是一个批量插入数据的实例吧。相关的代码: ...

    MySQL查询把多列返回结果集拼装成一个字段

    mysql中有种可以通过join相关操作进行表与表之间的方式查询不同结果集,但是在一对多的情况下,关键查询的结果是多条的.例如:班级和学习的关系,我想很直观的看到班级和学生的情况,列表显示出班级的信息和班级的男生...

    Sql经典练习题库(附答案)

    它以记录集合作为操作对象,所有SQL语句接受集合作为输入,返回集合作为输出,这种集合特性允许一条SQL语句的输出作为另一条SQL语句的输入,所以SQL语句可以嵌套,这使它具有极大的灵活性和强大的功能,在多数情况...

    SQL排除重复结果只取字段最大值分享

    如何用SQL排除重复结果只取字段最大值的记录?要求得到的结果(即是PID相同的记录只取ID值最大的那一条)。 代码如下:select * from [Sheet1$] awhere ID not exists (select 1 from [Sheet1$] where PID=a.PID and...

    SQL SERVER 将select数据生成insert语句

    数据同步小工具,将数据库中的表的数据生成insert语句

    SQL插入语句生成器

    现要向一台机(P2)的数据库(以HR为例)插入另一台机(P1)的HR_New_Info记录,可如下操作: 1.输入P1的IP,用户名,密码。数据库输入“HR” 2.在查询语句输入 select Title,Content,TypeName,Flag,DateAndTime ...

    SQLServer中防止并发插入重复数据的方法详解

    SQLServer中防止并发插入重复数据,大致有以下几种方法: 1.使用Primary Key,Unique Key等在数据库层面让重复数据无法插入。 2.插入时使用条件 insert into Table(****) select **** where not exists(select 1 ...

    经典全面的SQL语句大全

    虽然500这个数字看起来大了些,但相比更为稳固的企业解决方案这还是个小型数据库了,后者通常在一 个数据库内就包含了成千上万条记录。这时候不就死定了?  采用SQL,你就可以很快地找出准确的记录并且打开一个只...

    sql之select语句

    sql之select语句,sql之select语句,sql之select语句,sql之select语句

    经典SQL语句大全

    因为这样可以避免 top的字段如果是逻辑索引的,查询的结果后实际表中的不一致(逻辑索引中的数据有可能和数据表中的不一致,而查询时如果处在索引则首先查询索引) 14、说明:前10条记录 select top 10 * form table...

    SQLSelect.sql

    SQL基础查询语句五十条,可用于SQL数据库练习,其中包含详细的注释,非常适合新手练习,也可以用于期末复习

    SQLSERVER触发器插入数据

    CREATE TRIGGER TT ON TSYS_BAMKZ FOR INSERT AS INSERT TSYS_MKZ SELECT B.MKZM,A.yhz,B.PARENT FROM (SELECT DISTINCT yhz FROM TSYS_MKZ) A,INSERTED B

    sql课内上机实验数据更新

     使用INSERT INTO语句插入数据,包括插入一个元组或将子查询的结果插入到数据库中两种方式。  使用SELECT INTO语句,产生一个新表并插入数据。  使用UPDATE语句可以修改指定表中满足WHERE子句条件的元组,有三...

    DB2中常用的SQL语句

    DB2中常用的SQL语句 经典SQL语句集锦 SQL分类: DDL—数据定义语言(CREATE,ALTER,DROP,DECLARE) DML—数据操纵语言(SELECT,DELETE,UPDATE,INSERT) DCL—数据控制语言(GRANT,REVOKE,COMMIT,ROLLBACK)

Global site tag (gtag.js) - Google Analytics