ITPub博客

首页 > 数据库 > 数据库开发技术 > openGauss学习笔记-170 openGauss 数据库运维-备份与恢复导入数据-更新表中数据-使用合并方式更新和插入数据

openGauss学习笔记-170 openGauss 数据库运维-备份与恢复导入数据-更新表中数据-使用合并方式更新和插入数据

原创 数据库开发技术 作者:shuchaoyang 时间:2023-09-19 07:00:00 0 删除 编辑

openGauss学习笔记-170 openGauss 数据库运维-备份与恢复-导入数据-更新表中数据-使用合并方式更新和插入数据170.1 前提条件170.2 操作步骤

openGauss学习笔记-170 openGauss 数据库运维-备份与恢复-导入数据-更新表中数据-使用合并方式更新和插入数据

在用户需要将一个表中所有的数据或大量的数据添加至现有表的场景下,openGauss提供了MERGE INTO语句通过两个表合并的方式高效地将新数据添加到现有表。

MERGE INTO语句将目标表和源表中数据针对关联条件进行匹配,若关联条件匹配时对目标表进行UPDATE,关联条件不匹配时对目标表执行INSERT。此方法可以很方便地用来将两个表合并执行UPDATE和INSERT,避免多次执行。

170.1 前提条件

进行MERGE INTO操作的用户需要同时拥有目标表的UPDATE和INSERT权限,以及源表的SELECT权限。

170.2 操作步骤

  1. 创建源表products,并插入数据。

    openGauss=# CREATE TABLE products 
    ( product_id INTEGER,
    product_name VARCHAR2(60),
    category VARCHAR2(60)
    );

    openGauss=# INSERT INTO products VALUES
    (1502, 'olympus camera', 'electrncs'),
    (1601, 'lamaze', 'toys'),
    (1666, 'harry potter', 'toys'),
    (1700, 'wait interface', 'books');
  2. 创建目标表newproducts,并插入数据。

    openGauss=# CREATE TABLE newproducts 
    ( product_id INTEGER,
    product_name VARCHAR2(60),
    category VARCHAR2(60)
    );

    openGauss=# INSERT INTO newproducts VALUES
    (1501, 'vivitar 35mm', 'electrncs'),
    (1502, 'olympus ', 'electrncs'),
    (1600, 'play gym', 'toys'),
    (1601, 'lamaze', 'toys'),
    (1666, 'harry potter', 'dvd');
  3. 使用MERGE INTO 语句将源表products的数据合并至目标表newproducts。

    MERGE INTO newproducts np    
    USING products p    
    ON (np.product_id = p.product_id )    
    WHEN MATCHED THEN    
     UPDATE SET np.product_name = p.product_name, np.category = p.category
    WHEN NOT MATCHED THEN    
     INSERT VALUES (p.product_id, p.product_name, p.category) ;

    上述语句中使用的参数说明,请见表1。更多信息,请参见MERGE INTO。

    表 1 MERGE INTO语句参数说明

  4. 查询合并后的目标表newproducts。

    SELECT * FROM newproducts;

    返回信息如下:

     product_id |  product_name  | category
    ------------+----------------+-----------
          1501 | vivitar 35mm   | electrncs
          1502 | olympus camera | electrncs
          1666 | harry potter   | toys
          1600 | play gym       | toys
          1601 | lamaze         | toys
          1700 | wait interface | books
    (6 rows)


👍 点赞,你的认可是我创作的动力!

⭐️ 收藏,你的青睐是我努力的方向!

✏️ 评论,你的意见是我进步的财富!


原文作者:超哥的IT私房菜;如有侵权,请联系管理员删除。

请登录后发表评论 登录
全部评论
专注于IT系统集成、运维、架构二十年的IT职场老兵,拥有CCNA、OCA、OCP、PGCA、PGCE认证证书,公众号:超哥的IT私房菜,知识星球:超哥的IT私房菜,目前是多家IT厂商的咨询顾问。

注册时间:2021-08-27

  • 博文量
    552
  • 访问量
    303712