IT数码 购物 网址 头条 软件 日历 阅读 图书馆
TxT小说阅读器
↓语音阅读,小说下载,古典文学↓
图片批量下载器
↓批量下载图片,美女图库↓
图片自动播放器
↓图片自动播放器↓
一键清除垃圾
↓轻轻一点,清除系统垃圾↓
开发: C++知识库 Java知识库 JavaScript Python PHP知识库 人工智能 区块链 大数据 移动开发 嵌入式 开发工具 数据结构与算法 开发测试 游戏开发 网络协议 系统运维
教程: HTML教程 CSS教程 JavaScript教程 Go语言教程 JQuery教程 VUE教程 VUE3教程 Bootstrap教程 SQL数据库教程 C语言教程 C++教程 Java教程 Python教程 Python3教程 C#教程
数码: 电脑 笔记本 显卡 显示器 固态硬盘 硬盘 耳机 手机 iphone vivo oppo 小米 华为 单反 装机 图拉丁
 
   -> 大数据 -> Mysql/Oracle 批量新增(存在则更新) -> 正文阅读

[大数据]Mysql/Oracle 批量新增(存在则更新)

一、需求说明

1、记录用户多次每周考核的表t_result,表字段以及表数据如下:
result:0 参加考核 1通过 2未通过

iduuidresulttimecreatorcreate_timeeditoredit_time
12380be960f-cb32-4cf1-81f0-fcd5a11c92ba02022-06-21 09:00:00sys2022-06-21 10:00:00

2、从另一个平台获得的 用户考核记录临时表t_result_tmp,表字段和数据如下:

uuidresulttime
80be960f-cb32-4cf1-81f0-fcd5a11c92ba12022-06-21 09:00:00
80be960f-cb32-4cf1-81f0-fcd5a11c92ba12022-06-28 09:00:00

3、根据临时表t_result_tmp,更新t_result表:时间相同的更新,时间不存在的新增数据。

二、Mysql实现:批量新增(存在则更新)

sql文

INSERT INTO t_result ( id, uuid, result, `time`, creator, create_time ) 
    (
		SELECT DISTINCT
			tr.id,
			trt.uuid,
			trt.result,
			trt.`time`,
			'平台A',
			NOW() 
		FROM
			t_result_tmp trt
			LEFT JOIN t_result tr ON tr.uuid = trt.uuid AND tr.`time` = trt.`time` 
	) 
	ON DUPLICATE KEY UPDATE result = VALUES(result), editor = '平台A', edit_time = NOW()

ON DUPLICATE KEY UPDATE 方法说明

在insert的时候出现重复主键的时候,会执行后面的update语句。
重复主键包含:①主键 ②唯一索引

update字段可以直接赋固定值,写法如例子columnName = '平台A'
也可以赋值当前冲突数据中的值,写法如例子columnName = VALUES(columnName)

三、Oracle实现:批量新增(存在则更新)

sql文

MERGE INTO t_result TR
USING (
    SELECT UUID,
           RESULT,
           TIME
    FROM t_result_tmp
) TRT
ON (TR.UUID = TRT.UUID AND TR.TIME = TRT.TIME)
WHEN MATCHED THEN
    UPDATE
    SET TR.RESULT = TRT.RESULT,
        TR.EDITOR = '平台A',
        TR.EDIT_TIME = NOW()
WHEN NOT MATCHED THEN
    INSERT ( UUID, RESULT, TIME, CREATOR, CREATE_TIME )
    VALUES ( TRT.UUID, TRT.RESULT, TRT.TIME, '平台A', NOW() )

MERGE 语句语法

MERGE [hint] INTO [schema.] table [t_alias]
USING
[schema.]{ table | view | subquery } [t_alias]
ON ( condition )
WHEN MATCHED THEN merge_update_clause
WHEN NOT MATCHED THEN merge_insert_clause

USING的数据集避免为null,数据库不为空的字段A,可以在ON后面加上条件 A IS NOT NULL
ON子句的使用的字段不能够用于update,即Oracle不允许更新用于连接的列
③ 更新/插入的sql,不需要再写表名,merge后面已经加过表名。
update set 列 = 固定值 或者 update set 列 = using的表字段
insert values (值) 或者 insert (指定字段) values (对应的字段值)
④ update语句也可以加where条件,相当于on的补充写法

  大数据 最新文章
实现Kafka至少消费一次
亚马逊云科技:还在苦于ETL?Zero ETL的时代
初探MapReduce
【SpringBoot框架篇】32.基于注解+redis实现
Elasticsearch:如何减少 Elasticsearch 集
Go redis操作
Redis面试题
专题五 Redis高并发场景
基于GBase8s和Calcite的多数据源查询
Redis——底层数据结构原理
上一篇文章      下一篇文章      查看所有文章
加:2022-07-05 23:34:26  更:2022-07-05 23:34:43 
 
开发: C++知识库 Java知识库 JavaScript Python PHP知识库 人工智能 区块链 大数据 移动开发 嵌入式 开发工具 数据结构与算法 开发测试 游戏开发 网络协议 系统运维
教程: HTML教程 CSS教程 JavaScript教程 Go语言教程 JQuery教程 VUE教程 VUE3教程 Bootstrap教程 SQL数据库教程 C语言教程 C++教程 Java教程 Python教程 Python3教程 C#教程
数码: 电脑 笔记本 显卡 显示器 固态硬盘 硬盘 耳机 手机 iphone vivo oppo 小米 华为 单反 装机 图拉丁

360图书馆 购物 三丰科技 阅读网 日历 万年历 2024年5日历 -2024/5/19 22:29:01-

图片自动播放器
↓图片自动播放器↓
TxT小说阅读器
↓语音阅读,小说下载,古典文学↓
一键清除垃圾
↓轻轻一点,清除系统垃圾↓
图片批量下载器
↓批量下载图片,美女图库↓
  网站联系: qq:121756557 email:121756557@qq.com  IT数码