Oracle/MySQL实现根据一个表更新另一张表

最近接到一个从DB2数据导出,Oracle数据库导入的工作,导入到Oracle时肯定不能直接使用业务表,需要创建临时表,然后通过临时表更新业务表,那么问题来了,有更新有插入,该如何处理,之前记得MySQL是支持update A,B…操作的,Oracle之前没有听过,因此百度了下,得到的结论如下文所示

Oracle

Oracle中可以使用MERGE INTO语句

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
MERGE INTO T_USER T1      USING (
SELECT
userid AS id,
NAME AS username,
sex AS usersex
FROM
DUAL
) T2     ON (T1.userid = T2.id)     
WHEN MATCHED THEN
    UPDATE
SET t1. NAME = t2.username,
t1.sex = t2.usersex     
WHEN NOT MATCHED THEN
    INSERT (userid, NAME, sex)
VALUES
(
t2.id,
t2.username,
t2.usersex
)

MySQL

MySQL有则更新,无则插入

mysql中可以使用 ON DUPLICATE KEY进行处理,但是需要注意的是需要有主键,下面的实例中需要userid是主键

1
2
3
4
INSERT INTO T_USER (userid, NAME, sex)
VALUES
(id, username, usersex) ON DUPLICATE KEY UPDATE NAME = username,
sex = usersex;

单纯表更新

这种方式只是单纯的根据一个表的数据更新另一张的数据

1
2
3
4
5
UPDATE table_1 t1,
table_2 t2
SET t1. COLUMN = t2. COLUMN
WHERE
t1.id = t2.pid

引用:
Oracle实现一张表根据另一张表更新(有则更新无则插入)