从备份表中更新字段到正式表中,使用 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;
当然这并不是唯一的写法,还有一些灵活的地方,可以自行调整