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

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

时间:2023-12-23 18:32:56浏览次数:31  
标签:product WHEN 更新 id 子句 openGauss 数据 newproducts MATCHED

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语句参数说明

    参数 说明 举例
    INTO 子句 指定需要更新或插入数据的目标表。目标表支持指定别名。 **取值:newproducts np说明:**名为newproducts,别名为np的目标表。
    USING子句 指定源表。源表支持指定别名。 **取值:products p说明:**名为products,别名为p的源表。
    ON子句 指定目标表和源表的关联条件。关联条件中的字段不支持更新。 **取值:np.product_id = p.product_id说明:**指定的关联条件为,目标表newproducts的product_id字段和源表products的product_id字段相等。
    WHEN MATCHED子句 当源表和目标表中数据针对关联条件可以匹配上时,选择WHEN MATCHED子句进行UPDATE操作。仅支持指定一个WHEN MATCHED子句。WHEN MATCHED子句可缺省,缺省时,对于满足ON子句条件的行,不进行任何操作。若目标表中存在分布列,则该列不支持更新。 **取值:WHEN MATCHED THEN UPDATE SET np.product_name = p.product_name, np.category = p.category说明:**当满足ON子句条件时,将目标表newproducts的product_name、category字段的值替换为源表products相对应字段的值。
    WHEN NOT MATCHED子句 当源表和目标表中数据针对关联条件无法匹配时,选择WHEN NOT MATCHED子句进行INSERT操作。仅支持指定一个WHEN NOT MATCHED子句。WHEN NOT MATCHED子句可缺省。不支持INSERT子句中包含多个VALUES。WHEN MATCHED和WHEN NOT MATCHED子句顺序可以交换,可以缺省其中一个,但不能同时缺省。 **取值:**WHEN NOT MATCHED THENINSERT VALUES (p.product_id, p.product_name, p.category)**说明:**将源表products中,不满足ON子句条件的行插入目标表newproducts。
  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)
    

标签:product,WHEN,更新,id,子句,openGauss,数据,newproducts,MATCHED
From: https://blog.51cto.com/shuchaoyang/8945735

相关文章

  • openGauss学习笔记-171 openGauss 数据库运维-备份与恢复-导入数据-深层复制
    openGauss学习笔记-171openGauss数据库运维-备份与恢复-导入数据-深层复制171.1使用CREATETABLE执行深层复制该方法使用CREATETABLE语句创建原始表的副本,将原始表的数据填充至副本并重命名副本,完成原始表的复制。在创建新表时,可以指定表以及列属性,比如主键。171.1.1操作......
  • 6.PG数据库管理
    1.PG数据库库属主PG中的数据库属主属于创建者,只要有cretedb权限就可以创建数据库,数据库属主不一定拥有存放在该数据库中其它用户创建的对象的访问权限。数据库在创建后,允许public角色连接,即允许任何人连接数据库在创建后,不允许除了超级用户和owner之外的任何人在数据库中创建s......
  • Python数据科学手册笔记:IPython
    目录Ipython帮助文档用符号?来查来文档用??来获取源代码补全方法利用tab利用*加?来补全Ipython快捷键Ipython魔法命令粘贴代码块执行外部代码计算代码运行时间内存分析魔法函数帮助错误和调试控制异常:%xmode调试模型:%debug输入输出历史禁止输出历史输入Ipython和shell命令Ipyth......
  • 什么是数据埋点
    今天学习了一个新的内容--数据埋点,虽然我也是10多年的数据分析师了,但坦白讲,最近才听过这个名词,大家一起了解一下吧。一、定义埋点分析,是网站分析的一种常用的数据采集方法,指在需要采集数据的“操作节点”将数据采集的程序代码附加在功能程序代码中,对操作节点上用户行为或事件进行捕......
  • 【MySQL】SQL通用语法、SQL分类、约束、数据库设计、多表查询、事务
    SQL通用语法以分号结尾,可以单行/多行书写SQL语句不区分大小写,关键字建议使用大写注释单行注释:--注释或#注释多行注释:/*注释*/SQL分类DDL:操作数据库、表等DML:对表中的数据进行增删改DQL:对表中的数据进行查询DCL:对数据库进行权限控制DDL:操作数据库、表等DDL-操作......
  • tdsql(mysql版)数据库参数修改
    首先考虑赤兔管理系统修改参数;如果在赤兔管理系统无法修改参数,则需要修改mysql的参数文件一、在赤兔管理系统修改参数:1.在赤兔管理台主界面,单击左侧菜单【实例管理】>单击所需实例ID>【数据库管理】>【数据库参数】,进入数据库参数子界面。2.勾选需要更改的参数,并在对应【当前......
  • 选择适合的服务器主机安全软件以提升数据保护
    服务器主机的安全性对于保护网站和数据的完整性至关重要。为了增强服务器主机的安全性,选择适当的安全软件是至关重要的。本文将介绍一些常见的服务器主机安全软件以及它们的功能,帮助您选择最适合您需求的安全软件。一、入侵检测系统(IntrusionDetectionSystem,简称IDS):入侵检测系统......
  • 服务器数据恢复过程:
    1、将故障服务器中的所有硬盘编号后取出。由硬件工程师对所有硬盘做硬件故障检测,检查每块硬盘的运行状态是否良好。2、将当前所有运行状态良好的硬盘以只读方式镜像到备份服务器中。针对存在物理故障的硬盘,按照相应故障类型进行相应处理,尽可能将存在物理故障的硬盘中的数据镜像到......
  • 实时获取淘宝商品评论数据:价值、挑战与解决方案
    一、引言随着电商行业的迅猛发展,用户评论在电商决策中的影响力逐渐增强。作为中国电商市场的领军者,淘宝提供了商品评论API,使得第三方开发者可以轻松获取淘宝商品评论数据。本文将深入探讨淘宝商品评论API在电商行业中的重要性,以及如何通过API实现实时数据获取。二、淘宝商品评论API......
  • el-upload批量上传,获取第一个数据返回参数并在后面的上传中进行传递;递归
    fileChange(file,fileList){const{raw}=file;if(file.status!='ready')return;if(file.size/1024/1024>100){this.$message.error('文件大小不能超过100M');returnfalse;} this.upFileList=[]for(letx......