您的位置:首页 > 其它

MERGE--一个语句实现存在就更新,不存在就插入

2011-11-22 23:24 309 查看
使用MERGE语句从一个表中的选择的行更新或插入到另一个表。是否更新或插入到目标表中的决定是基于在ON子句中的条件。它可以让你避免多个INSERT和UPDATE DML语句。

语法为:

MERGE INTO table

USING data_source

ON (condition)

WHEN MATCHED THEN update_clause

WHEN NOT MATCHED THEN insert_clause;

案例:

比如现在有A、B两个表

A

name sal

张三 4000

李四 5000

王五 5500

B

name sal

张三 5300

刘二 7000

现在有个需求,要将B表里的数据更新到A表,如果A表存在的记录就更新sal字段,如果A表不存在的记录就往里插入。

如果用insert、update实现

insert into A

select * from B where B.name not in (select name from A);

update A

set A.sal = (select b.sal from B where B.Name = A.Name)

where A.Name in (select B.Name from B);

如果用MERGE实现

merge into A

using B

on (A.NAME = B.NAME)

when matched then

update

set A.SAL = B.Sal

when not matched then

insert (A.NAME,A.SAL)

values (B.Name,B.SAL);

本文出自 “richard的笔记-积微成著” 博客,请务必保留此出处http://zxf261.blog.51cto.com/701797/722324
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: 
相关文章推荐