问题:项目中需要批量插入一个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 查出一张表中重复的所有记录数据 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
原来一次性向数据库里插入数据的条数不能太多,上限是500条。超出会报错。 解决方案就是只好分多次插入数据库了。 您可能感兴趣的文章:SQLite教程(八):命令行工具介绍SQLite教程(十二):锁和并发控制详解...
本文是mysql 数据库 问题一 将表一的数据导入表二...在表中插入数据时,某一字段取数据库中该字段的最大值,并+1,这个问题很多人都说用存储过程什么的解决,其实使用insert 和 select 结合就可以很好的解决这个问题啊
自己总结的关于 db2数据库当前日期和前一天日期的sql语句
循环插入: 代码如下: DECLARE @MyCounter INT SET @MyCounter = 0 /*设置变量*/ WHILE (@MyCounter < 2) /*设置循环次数*/ BEGIN WAITFOR DELAY ‘000:00:10’ /*延迟时间10秒*/ INSERT INTO time_by_day (time_...
支持批量插入的Delphi数据输入程序,配合数据实现的数据批量输入程序,程序的原型是一个学生管理程序,用来输入学生的基本信息,本程序添加了批量插入数据的功能,可看作是一个批量插入数据的实例吧。相关的代码: ...
mysql中有种可以通过join相关操作进行表与表之间的方式查询不同结果集,但是在一对多的情况下,关键查询的结果是多条的.例如:班级和学习的关系,我想很直观的看到班级和学生的情况,列表显示出班级的信息和班级的男生...
它以记录集合作为操作对象,所有SQL语句接受集合作为输入,返回集合作为输出,这种集合特性允许一条SQL语句的输出作为另一条SQL语句的输入,所以SQL语句可以嵌套,这使它具有极大的灵活性和强大的功能,在多数情况...
如何用SQL排除重复结果只取字段最大值的记录?要求得到的结果(即是PID相同的记录只取ID值最大的那一条)。 代码如下:select * from [Sheet1$] awhere ID not exists (select 1 from [Sheet1$] where PID=a.PID and...
数据同步小工具,将数据库中的表的数据生成insert语句
现要向一台机(P2)的数据库(以HR为例)插入另一台机(P1)的HR_New_Info记录,可如下操作: 1.输入P1的IP,用户名,密码。数据库输入“HR” 2.在查询语句输入 select Title,Content,TypeName,Flag,DateAndTime ...
SQLServer中防止并发插入重复数据,大致有以下几种方法: 1.使用Primary Key,Unique Key等在数据库层面让重复数据无法插入。 2.插入时使用条件 insert into Table(****) select **** where not exists(select 1 ...
虽然500这个数字看起来大了些,但相比更为稳固的企业解决方案这还是个小型数据库了,后者通常在一 个数据库内就包含了成千上万条记录。这时候不就死定了? 采用SQL,你就可以很快地找出准确的记录并且打开一个只...
sql之select语句,sql之select语句,sql之select语句,sql之select语句
因为这样可以避免 top的字段如果是逻辑索引的,查询的结果后实际表中的不一致(逻辑索引中的数据有可能和数据表中的不一致,而查询时如果处在索引则首先查询索引) 14、说明:前10条记录 select top 10 * form table...
SQL基础查询语句五十条,可用于SQL数据库练习,其中包含详细的注释,非常适合新手练习,也可以用于期末复习
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
使用INSERT INTO语句插入数据,包括插入一个元组或将子查询的结果插入到数据库中两种方式。 使用SELECT INTO语句,产生一个新表并插入数据。 使用UPDATE语句可以修改指定表中满足WHERE子句条件的元组,有三...
DB2中常用的SQL语句 经典SQL语句集锦 SQL分类: DDL—数据定义语言(CREATE,ALTER,DROP,DECLARE) DML—数据操纵语言(SELECT,DELETE,UPDATE,INSERT) DCL—数据控制语言(GRANT,REVOKE,COMMIT,ROLLBACK)