Oracle查询优化-合并记录

简介: 【2月更文挑战第1天】【2月更文挑战第2篇】用于备份或者同步冗余数据时使用。

从备份表中更新字段到正式表中,使用 UPDATE 批量更新大量的数据,会出现效率低下,有时候甚至卡死的情况,后面通过使用 MERGE INTO 代替 UPDATE 执行批量更新,会提升执行效率。

-- 创建目标表(若不存在)
CREATE TABLE IF NOT EXISTS target_table (id INT PRIMARY KEY, name VARCHAR(50));

-- 创建源表1(若不存在)
CREATE TABLE IF NOT EXISTS source_table1 (id INT PRIMARY KEY, name VARCHAR(50));

-- 创建源表2(若不存在)
CREATE TABLE IF NOT EXISTS source_table2 (id INT PRIMARY KEY, name VARCHAR(50));

-- 向源表1插入数据
INSERT INTO source_table1 VALUES (1, 'John');
INSERT INTO source_table1 VALUES (2, 'Jane');

-- 向源表2插入数据
INSERT INTO source_table2 VALUES (3, 'Tom');
INSERT INTO source_table2 VALUES (4, 'Alice');

-- 使用 MERGE INTO 合并记录到目标表
MERGE INTO target_table AS tt
USING (SELECT id, name FROM source_table1 UNION ALL SELECT id, name FROM source_table2) AS st ON tt.id = st.id
WHEN MATCHED THEN UPDATE SET tt.name = st.name -- 当有重复记录时更新名称
WHEN NOT MATCHED THEN INSERT (tt.id, tt.name) VALUES (st.id, st.name); -- 没有重复记录则插入新记录

-- 输出结果
SELECT * FROM target_table;

当然这并不是唯一的写法,还有一些灵活的地方,可以自行调整

目录
相关文章
|
7月前
|
SQL Oracle 关系型数据库
Oracle查询优化-将字符和数字分离
【2月更文挑战第4天】【2月更文挑战第9篇】将字符和数字分离
67 2
|
7月前
|
SQL Oracle 关系型数据库
Oracle查询优化-查询只包含数字或字母的数据
【2月更文挑战第4天】【2月更文挑战第10篇】查询只包含数字或字母的数据
851 1
|
7月前
|
Oracle 关系型数据库 数据库
Oracle查询优化-阻止对某几列插入
【1月更文挑战第5天】【1月更文挑战第15篇】在Oracle数据库中,如果想要阻止对某些列的插入操作,有多种方法可以实现。
47 2
|
7月前
|
SQL Oracle 关系型数据库
Oracle查询优化-计算字符在字符串中出现的次数
【2月更文挑战第3天】【2月更文挑战第7篇】只接上SQL
145 0
|
7月前
|
Oracle 关系型数据库 数据库
Oracle查询优化-复制表的定义及数据
【1月更文挑战第5天】【1月更文挑战第14篇】在Oracle数据库中,复制表定义和复制表数据是两个常见的操作。
114 1
|
7月前
|
Oracle 关系型数据库
Oracle查询优化-分解IP地址
【2月更文挑战第5天】【2月更文挑战第12篇】分解IP地址
72 8
|
7月前
|
存储 Oracle 关系型数据库
Oracle查询优化-提取姓名大写首字母缩写
【2月更文挑战第5天】【2月更文挑战第11篇】提取姓名大写首字母缩写
135 6
|
7月前
|
Oracle 关系型数据库
Oracle查询优化-行转列
【2月更文挑战第6天】【2月更文挑战第15篇】行转列
60 4
|
7月前
|
Oracle 关系型数据库
Oracle查询优化-列转行
【2月更文挑战第6天】【2月更文挑战第16篇】列转行
66 4
|
7月前
|
Oracle 关系型数据库
Oracle查询优化-累计求和
【2月更文挑战第6天】【2月更文挑战第14篇】累计求和
64 3

推荐镜像

更多