SQL 中 Merge 的用法

1. 用法
根据与源表联接的结果,对目标表运行插入、更新或删除操作。
例如,根据与另一个表的区别,在一个表中插入、更新或删除行,从而同步两个表。

2. 语法

MERGE target_table AS target
USING source_table AS source
ON (merge_condition)
WHEN MATCHED THEN
    ... (update statement)
WHEN NOT MATCHED THEN
    ... (insert statement)
WHEN NOT MATCHED BY SOURCE THEN
    ... (delete statement)
  • target_table 是目标表,它是我们要进行插入、更新和删除操作的表。

  • source_table 是源表,它是我们用于与目标表进行匹配的源数据集。

  • merge_condition 是用于匹配目标表和源表的条件,通常是两个表之间的某个列或一组列的比较。

  • WHEN MATCHED THEN 子句定义了当目标表和源表匹配时要执行的更新操作。

  • WHEN NOT MATCHED THEN 子句定义了当目标表和源表不匹配时要执行的插入操作。

  • WHEN NOT MATCHED BY SOURCE THEN 子句定义了当目标表中的记录在源表中找不到匹配时要执行的删除操作。

3. 应用示例

源表:MERGE_SOURCE:
在这里插入图片描述
要更新的目标表:MERGE_TARGET
在这里插入图片描述

代码实现:

--建表
if object_id('MERGE_SOURCE','u') is not null drop table MERGE_SOURCE
go
create table MERGE_SOURCE(
     ID  INT
    ,Name varchar(20)
    ,age int
)
go
insert into MERGE_SOURCE
values
 (1,'Amy',23)
,(2,'Coco',26)
,(3,'Helen',30)
go
if object_id('MERGE_TARGET','u') is not null drop table MERGE_TARGET
go
create table MERGE_TARGET(
     ID  INT
    ,Name varchar(20)
    ,age int
)
go
insert into MERGE_TARGET
values
 (1,'Amy',23)
,(3,'Helen',30)
,(4,'Emma',25)
,(5,'Jane',21)
go
--操作
merge into MERGE_TARGET TARGET--要更新的目标表
USING(SELECT B.ID,B.NAME,B.AGE FROM MERGE_SOURCE B) SOURCE--源表
ON(TARGET.ID=SOURCE.ID)
WHEN MATCHED THEN
 UPDATE
 SET TARGET.NAME=SOURCE.NAME,
   TARGET.AGE=SOURCE.AGE
WHEN NOT MATCHED THEN
 INSERT VALUES(SOURCE.ID,SOURCE.NAME,SOURCE.AGE);

运行成功之后TARGET表显示:
在这里插入图片描述

  • 1
    点赞
  • 15
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值