SQLServer中merge函数用法详解
在SQLServer中,我们经常需要将两张相近的表格进行合并更新,这时merge函数就派上用场了。常见的场景比如我们需要将销售情况表中的数据与客户信息表中的数据进行匹配,更新客户的联系方式。使用merge函数可以轻松完成该任务。
merge函数基本语法
MERGE target_table USING source_table
ON merge_condition
WHEN MATCHED THEN update_statement
WHEN NOT MATCHED THEN insert_statement
target_table:目标表格,即需要被更新的表格;
source_table:源表格,即提供需要更新数据的表格;
merge_condition:合并条件,用于指定如何将目标表格和源表格关联起来;
update_statement:如果目标表格和源表格匹配成功,则执行更新语句;
insert_statement:如果目标表格和源表格未匹配到,则执行插入语句。
merge函数示例
假设我们有两张表格,一张用于记录商品销售情况,另一张用于记录商品的基本信息。需要将商品销售情况表格中的商品名,更新为商品基本信息表格中的商品名,并记录更新的日期时间。
1. 创建商品销售情况表格sales和商品基本信息表格products
CREATE TABLE sales(
product_id int,
product_name varchar(50),
sale_num int,
sale_date datetime
);
CREATE TABLE products(
product_id int,
product_name varchar(50),
price decimal(10, 2)
);
2. 插入数据
INSERT INTO products (product_id, product_name, price)
VALUES (1, '手机', 3999.00),
(2, '电视', 6999.00),
(3, '电脑', 7999.00);
INSERT INTO sales (product_id, product_name, sale_num, sale_date)
VALUES (1, '手机', 100, '2021/5/1'),
(1, 'iphone', 200, '2021/5/1'),
(2, '电视机', 50, '2021/5/1'),
(3, '树莓派', 20, '2021/5/1');
3. 使用merge函数进行更新
MERGE sales AS target
USING products AS source
ON target.product_id = source.product_id
WHEN MATCHED THEN
UPDATE SET target.product_name = source.product_name, target.sale_date = GETDATE()
WHEN NOT MATCHED THEN
INSERT (product_id, product_name, sale_num, sale_date)
VALUES (source.product_id, source.product_name, 0, GETDATE());
执行以上merge函数后,sales表格中的数据将会变成:
| product_id | product_name | sale_num | sale_date |
|------------|--------------|----------|------------------------|
| 1 | 手机 | 100 | 2021-09-21 15:32:43.640 |
| 1 | iphone | 200 | 2021-09-21 15:32:43.640 |
| 2 | 电视 | 50 | 2021-09-21 15:32:43.640 |
| 3 | 电脑 | 20 | 2021-09-21 15:32:43.640 |
可以看到,sales表格中的数据成功被更新。同时,如果源表格中有未匹配到的数据,merge函数也会将其插入到目标表格中。此时,insert_statement语句将会生效,该数据的sale_num属性会被赋值为0。
4. merge函数用法注意点
- merge函数必须有ON子句,用于指明合并条件;
- 匹配时只能匹配到一条记录,如果有多条记录,则merge函数会报错;
- merge函数会首先对源表格进行筛选操作,以保证合并时只会合并到满足条件的数据。
本站文章如无特殊说明,均为本站原创,如若转载,请注明出处:SQLServer中merge函数用法详解 - Python技术站