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
    评论
SQL MERGE 语句用于将一个表的数据合并到另一个表。它包含三个子句:源表查询子句(用于指定源表数据的查询条件)、目标表名称和 ON 子句(用于指定用于匹配源和目标表记录的列)和 WHEN MATCHED 和 WHEN NOT MATCHED 子句(用于指定在匹配或未匹配的情况下需要执行的操作)。 以下是 SQL MERGE 语句的基本语法: ``` MERGE INTO target_table [AS target_alias] USING source_query [AS source_alias] ON join_condition WHEN MATCHED THEN update_statement WHEN NOT MATCHED THEN insert_statement ``` 在此语法,`target_table` 是目标表的名称,`source_query` 是用于选择源表数据的查询条件。`join_condition` 指定用于匹配源和目标表记录的列。`update_statement` 指定在源表和目标表都存在记录的情况下更新目标表的语句,`insert_statement` 指定在源表和目标表都不存在记录的情况下插入新记录的语句。 例如,下面的 SQL MERGE 语句将从 `source_table` 选择所有年龄大于 30 岁的记录,并将它们插入到 `target_table` 。如果 `target_table` 已经存在相同的记录,则更新 `target_table` 的记录,将其 `salary` 字段值设置为 `source_table` 对应记录的 `salary` 字段值: ``` MERGE INTO target_table AS t USING ( SELECT * FROM source_table WHERE age > 30 ) AS s ON t.id = s.id WHEN MATCHED THEN UPDATE SET t.salary = s.salary WHEN NOT MATCHED THEN INSERT (id, name, age, salary) VALUES (s.id, s.name, s.age, s.salary); ```

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值