oracle merge into与sqlserver merge into 比较

merge into:
在两个表之间,根据与源表联接的结果,对目标表执行插入、更新或删除操作。
Oracle在9i引入了merge into命令,SQL Server 2008也引入merge into。

不多说了,实例对比一下吧!


oracle merge into:

  1. /*  
  2. drop table a;  
  3. drop table b;  
  4. */  
  5.   
  6. create table a (aid integer null,aname varchar2(10) null);  
  7. create table b (bid integer null,bname varchar2(10) null);  
  8.   
  9. insert into a values(1,'aname1');  
  10. insert into a values(3,'aname3');  
  11. insert into a values(4,'aname4');  
  12.   
  13. insert into b values(1,'bname1');  
  14. insert into b values(2,'bname2');  
  15. insert into b values(3,'bname3');  
  16.   
  17. merge into a   
  18. using b   
  19. on (a.aid=b.bid)--必须加括号  
  20. when matched then   
  21.   update set a.aname=b.bname where b.bid>1 --可加条件  
  22. when not matched then   
  23.   insert values(b.bid,b.bname)  
  24.     
  25. select * from a;  
  26. select * from b;  

查看A表结果:


1. 条件id>1 不更新

2. 符合条件,更新目标表

3. 注意:目标表中,此行 aid<>bid,保留了下来

4. 目标表中不存在id=2的,插入到目标表

sqlserver2008  merge into:

  1. /*  
  2. drop table a;  
  3. drop table b;  
  4. */  
  5. create table a (aid int null,aname varchar(10) null);  
  6. create table b (bid int null,bname varchar(10) null);  
  7.   
  8. insert into a values(1,'aname1');  
  9. insert into a values(3,'aname3');  
  10. insert into a values(4,'aname4');  
  11.   
  12. insert into b values(1,'bname1');  
  13. insert into b values(2,'bname2');  
  14. insert into b values(3,'bname3');  
  15.   
  16. merge into a  
  17. using b   
  18. on a.aid=b.bid --可不用括号  
  19. when matched then   
  20.   update set a.aname=b.bname  
  21. when not matched then   
  22.   insert values(b.bid,b.bname)  
  23. when not matched by source then --在a表中无操作的记录可执行删除  
  24.   delete--必须以分号结束  
  25.   
  26.   
  27. select * from a;  
  28. select * from b;  

查看A表结果:


看,匹配的完全更新到A表!


oracle merge into 和 sqlserver 2008 merge into 的区别:

1. oracle在连接条件 on(a.aid=b.bid) 必须加括号,sqlserver 可以不用,也可以用。

2. oracle中目标表不参与的记录行只能保留,sqlserver 还可以执行删除。

3. oracle 在匹配条件中可以进一步添加更新的筛选条件,sqlserver不能增加条件约束。

4. oracle在语句结尾可加或不加分号,sqlserver 必定要在语句结束后添加分号“;”。

引用自:http://blog.csdn.net/kk185800961/article/details/8760634

原文地址:https://www.cnblogs.com/shisw/p/3513889.html