Merge into 用法

Merge的用法
Merge可以完成以下功能:
1、    两个表之间数据的更新
2、    进行进销存更新库存
3、    进行表之间数据的复制
语法说明:
1、    在语句结束后一定要用分号,否则会提示错误。
2、    Merge后为目标表,Using后为数据源表
3、    如果有两个 When  matched,则必须使用and来限定第一个子句,一个子句必须制定一个update,另一个必须制定delete
4、     When  not matched by target,这个子句处理存在于数据源之中,但不存在目标之中的数据行。
5、     When  not matched等价于 When  not matched by target
6、     When  not mathed by source,这个子句处理,存在于目标中,但是不存在数据表之中的数据行
一、两个表之间数据的更新
create table test1 (col1 int,col2 varchar(100))
create table test2 (col3 int,col4 varchar(100))
  
insert into test1
values(1, 'wang'),(2,'trieagle')
insert into test2(col3)
values(1),(2)
merge test2
using test1
on test1.col1=test2.col3
when matched then update set col4=col2;
  
select * from test2
结果:
col3        col4
1           wang
2           trieagle
二、进行进销存更新库存
Trade表为模拟进出库记录,正数表示入库,负数表示出库
create table stock(id int,qty int)
create table trade(id int ,qty int)
go
insert into stock
values (1,10), (2,20)
insert into trade
values(1,10),(1,-5),(1,20),(2,10),(2,-30),(3,5)
  
merge stock
using (select id,qty=sum(qty) from trade group by id) K
on stock.id=k.id
when matched and (stock.qty+k.qty)=0 then delete
when matched then update set stock.qty=stock.qty+k.qty
when not matched by target then insert values(k.id,k.qty);
  
select * from stock
结果:
id          qty
1           35
3           5
三、进行表之间数据的复制
drop table test1
drop table test2
create table test1 (col1 int,col2 varchar(100))
create table test2 (col3 int,col4 varchar(100))
  
insert into test1
values(1, 'wang'),(2,'trieagle')
  
merge test2
using test1 on test1.col1 =test2.col3
when matched and col2!=col4 then update set col4=col2
when not matched then insert values(col1,col2)
when not matched by source then delete;
  
select* from test2
结果:
col3        col4
1           wang
2           trieagle
  
继续:删掉test1中的一行,然后增加一行
Delete test1 where col1=1
Insert into test1 values(3, 'wyq')
然后再执行
merge test2
using test1 on test1.col1 =test2.col3
when matched and col2!=col4 then update set col4=col2
when not matched then insert values(col1,col2)
when not matched by source then delete;
  
结果:
col3        col4
2           trieagle
3           wyq
 
 
转自:http://blog.csdn.net/gongjian0628/article/details/12751761

转载于:https://www.cnblogs.com/getpower/p/10815270.html

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值