SQLServer中merge函数用法详解

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技术站

(0)
上一篇 2023年5月21日
下一篇 2023年5月21日

相关文章

  • MySQL中create table语句的基本语法是

    MySQL中create table语句是用于创建新表的关键字,其基本语法如下: create table table_name( column1 datatype, column2 datatype, column3 datatype, … ); 其中table_name是要创建的表的名称,column1, column2, column3, …是…

    database 2023年5月22日
    00
  • mysql 索引过长1071-max key length is 767 byte

      原因 数据库表采用utf8编码,其中varchar(255)的column进行了唯一键索引 而mysql默认情况下单个列的索引不能超过767位(不同版本可能存在差异)   于是utf8字符编码下,255*3 byte 超过限制   解决 1  使用innodb引擎; 2  启用innodb_large_prefix选项,将约束项扩展至3072byte; …

    MySQL 2023年4月12日
    00
  • Centos7.4 zabbix3.4.7源码安装的方法步骤

    下面是Centos7.4 zabbix3.4.7源码安装的方法步骤的完整攻略。 1. 安装依赖 在安装Zabbix之前,需要安装一些系统和库依赖,以确保一切顺利。在CentOS上,可以使用以下命令安装这些依赖: yum -y install gcc gcc-c++ mariadb-devel mariadb-libs mariadb httpd php ph…

    database 2023年5月22日
    00
  • mysql_connect(): Connection using old (pre-4.1.1) authentication protocol refused

    “mysql_connect():Connection using old(pre-4.1.1)authentication protocol refused”是一个很常见的MySQL错误,它通常出现在使用旧版本的MySQL客户端连接新版本MySQL服务器的情况下。在MySQL的4.1.1版本以前,MySQL的身份验证协议中使用了旧的非加密传输的方式进行身份…

    database 2023年5月22日
    00
  • redis设置密码登录远程访问及linux

     参考文献 windows环境 1,修改redis.conf配置文件 2.1.关闭保护模式 设置protected-mode no(必须操作) ################################## NETWORK ##################################### protected-mode no #开启了保护模式,…

    Redis 2023年4月13日
    00
  • 对台湾视频站点的再次渗透尝试

    攻击台湾视频站点的尝试多次发生,攻击者尝试从站点中窃取用户数据和控制站点,其中一些攻击尝试已经成功而且用户的数据被泄露。 下面将详细讲解一种攻击台湾视频站点的攻略,该攻略的步骤如下: 步骤1:目标选择 攻击者需要选择目标,以攻击台湾视频站点。攻击者需要了解目标站点的类型、用途和访问模式。攻击者可能会选择一个热门的站点,因为这样的站点通常有大量的用户会访问,攻…

    database 2023年5月18日
    00
  • mysql多个left join连接查询用法分析

    MySQL多个LEFT JOIN连接查询用法分析 在MySQL中,多个LEFT JOIN连接查询是非常常见的操作,它可以将多张表的数据进行关联,使得查询结果更加详细。本文将详细讲解MySQL多个LEFT JOIN连接查询的用法及示例操作。 什么是多个LEFT JOIN连接查询 多个LEFT JOIN连接查询是指在一个SQL语句中,使用LEFT JOIN关键字…

    database 2023年5月22日
    00
  • redis怎么获取所有key

    这篇文章主要介绍“redis怎么获取所有key”,在日常操作中,相信很多人在redis怎么获取所有key问题上存在疑惑,小编查阅了各式资料,整理出简单好用的操作方法,希望对大家解答”redis怎么获取所有key”的疑惑有所帮助!接下来,请跟着小编一起来学习吧! keys:全量遍历键,用来列出所有满足特定正则字符串规则的key,假设redis此时正在生产环境下…

    Redis 2023年4月13日
    00
合作推广
合作推广
分享本页
返回顶部