`
crabdave
  • 浏览: 1301522 次
  • 性别: 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 是按照某个字段,把表数据平均分配到几个节点上

分享到:
评论

相关推荐

    用一条SQL语句将数据表中某列更新到另一个数据表里

    ### 使用单条SQL语句更新数据表中的某一列至另一表 #### 背景介绍 在数据库管理中,经常需要对数据进行更新操作来确保数据的准确性和时效性。有时候,这种更新不仅限于同一张表内,还可能涉及到跨表的操作。例如,...

    经典SQL语句大全

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

    Oracle数据库迁移到DB2数据库的技巧和注意点.doc

    8. 定义一个 package 作为动态游标,返回结果集:在DB2数据库中,定义一个 package 作为动态游标,返回结果集需要使用存储过程来实现。 9. 在 cursor 中使用 with 语句,需要改写:在DB2数据库中,在 cursor 中使用...

    数据库操作语句大全(sql)

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

    SQLserver远程或本地连接ACCESS教程.pdf

    在学习SQL Server与Microsoft Access之间的数据导入导出操作时,我们首先需要了解如何使用Transact-SQL语句来实现这一目的。Transact-SQL(T-SQL)是SQL Server使用的SQL语言的扩展,它允许我们在SQL Server环境内...

    超实用sql语句

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

    第05章_排序与分页3

    其中,第一个“位置偏移量”参数指示MySQL从哪一行开始显示,是一个可选参数,如果不指定“位置偏移量”,将会从表中的第一条记录开始(第一条记录的位置偏移量是0,第二条记录的位置偏移量是1,以此类推);第二个...

    MySQL面试题,扫盲学习,从零开始

    例如,我们开发一款软件,然后这款软件能使用到数据库(和数据库有关系,有通信),那么,这一款软件我们就可以称之为数据库应用系统。 6. 数据库相关概念 数据库相关概念有很多,例如数据完整性、数据安全性、...

Global site tag (gtag.js) - Google Analytics