使用meger进行表数据的合并

在oracle中有时候会遇到两张表数据合并在一起的时候,我一开始的做法是删除重复的数据,然后重新插入,但是这样的的效率很慢,若数据量大的话还容易出问题,所以后来在网上找到了使用meger的方法,但是根据网上的写法出现了错误,百般修改后得出了自己的一点经验,贴出来方便记忆和帮助其他人

首先新建两张表

我的表结构是这样的

create table LHH
(
id CHAR(20),
name CHAR(20),
val CAHR(20)

);
create table LHH1
(
id CHAR(20),
name CHAR(20)
,
val CAHR(20)
);

然后插入测试数据
不用插入太多lhh插入3-4条,lhh1插入一条即可
然后就可以写meger代码了
然后把lhh同步到lhh1中去

我一开始是这样写的

MERGE INTO lhh1 b USING (select id,name,val from lhh) a ON(a.id=b.id and a.name=b.name)
WHEN MATCHED THEN
update lhh1 set id=a.ad,val=a.val
WHEN NOT MATCHED THEN
insert lhh(id,name,val) values(a.id,a.name,a.val);
–其实这种方法是不正确的

正确的写法应该是这样的

MERGE INTO lhh1 b USING (select id,name,val from lhh) a ON(a.id=b.id and a.name=b.name)–条件字段不能作为要update修改的字段,否则会报错
WHEN MATCHED THEN
update set val=a.val –此处不加表名,update时是不加表名的
WHEN NOT MATCHED THEN
insert values(a.id,a.name,a.val);–插入的时候直接insert into values 我不知道为什么要这样写,但是不这样写的话就会报错缺少values关键字
–若字段不是对应的话还可以这样写
–insert (id,name,val) values(a.id,a.name,a.val);

写好以后就可以去执行了,然后如果不报错的话去查看两个表的数据,不出意外的话应该是一样的

 

meger还有其他的功能,在这里就不一一写下去了,可以参考下这篇文章https://www.cnblogs.com/lgx5/p/4813357.html

注:本文为原创,若转载请说明出处

 

上一篇
下一篇