场景:在远程oracle上存在一张表A,在本地同样存在一张相同表结构的表B。由于本地表B中保存了业务系统操作产生的几条记录,同时原来导入了A中的部分记录,但是并没有保存A中全部的记录。A中有15条记录,B中保存了A中3条记录同时B中还有本地业务系统产生的4条记录,不能删除B中的业务系统产生的4条记录。现在想将A中的另外的12条记录导入B中,同时有能保留B中原来的由业务系统产生的4条记录。
解决sql:
1、先在A中获得在B中出现过的记录。
select * from A@dblink_name a where exists
(select * from B b wherer b.colume1=a.colume1 and b.colume2=a.colume2 and b.colume3=a.colume3)
2、获得A中在B中没有出现过的记录 exists替换为not exists;
3、将没有在B中出现过的记录插入A中
insert into B
select * from A@dblink_name a where not exists
(select * from B b wherer b.colume1=a.colume1 and b.colume2=a.colume2 and b.colume3=a.colume3);
注:使用此方法导入数据可以避免导入重复记录的数据(表中不存在主键约束的情况下)。如果表中存在关于某个字段的主键约束的情况下,如果不按照区分不存在数据的方法导入的话是违反主键约束的。