基本概念:
MERGE语句是SQL语句的一种。在SQL Server、Oracle数据库中可用,MySQL、PostgreSQL中不可用。MERGE是Oracle9i新增的语法,用来合并UPDATE和INSERT语句。通过MERGE语句,根据一张表(原数据表,source table)或子查询的连接条件对另外一张(目标表,target table)表进行查询,连接条件匹配上的进行UPDATE,无法匹配的执行INSERT。这个语法仅需要一次全表扫描就完成了全部工作,执行效率要高于INSERT+UPDATE。
具体来说,MERGE语句会检查原数据表记录和目标表记录。如果记录在原数据表和目标表中均存在,则目标表中的记录将被原数据表中的记录所更新(执行Update操作);如果目标表中不存在的某(些)记录,在原数据表中存在,则原数据表的这(些)记录将被插入到目标表中(执行Insert操作)。
在Oracle 10g之前,merge语句支持匹配更新和不匹配插入两种简单的用法,在10g中Oracle对merge语句做了增强,增加了条件选项WHERE和DELETE操作.
Merge语法:
merge into 目标表名
using( select * from 根据表名)
on 关联条件
when matched then
update set xxx = xxx,xxx=xxx where 条件
when not matched then
insert values (xxx,xxxx,xxx,xx )
注:批量修改和增加 可以一个使用,也可以分开使用,根据实际情况来选择
如:
merge into ASS_DUAL_1 t
using (select * from ASS_DUAL_2) b
on (t.id= b.id)
--修改
when matched then
update set t.DEPRE_MONEY= b.Depre_Money , t.cur_money = b.cur_money
--增加
when not matched then
insert values (xx,xx,xx,xx)
本人亲自验证过