一。语法
MERGE INTO table_name table_alias
USING (table|view|sub_query) alias
ON (join condition)
WHEN MATCHED THEN
UPDATE SET
col1 = col_val1,
col2 = col2_val
WHEN NOT MATCHED THEN
INSERT (column_list)
VALUES (column_values);
二。列子 建立实验表,e1和e2表中有重复的人,但工资不同
SQL> select * from e1;
EMPNO ENAME SAL
---------- ---------- ----------
7782 CLARK 2450
7839 KING 5000
7934 MILLER 1300
SQL> select * from e2;
EMPNO ENAME SAL
---------- ---------- ----------
7369 SMITH 900
7566 JONES 3075
7782 CLARK 2550
7839 KING 5100
7902 FORD 3100
merge into e1 using e2 on(e1.empno=e2.empno)
when matched then
update set e1.sal=e2.sal
when not matched then
insert values(e2.empno,e2.ename,e2.sal);
commit;
执行结果:
SQL> SELECT * FROM E1
EMPNO ENAME SAL
---------- ---------- ----------
7369 SMITH 900
7566 JONES 3075
7782 CLARK 2450
7839 KING 5000
7902 FORD 3100
7934 MILLER 1300
6 rows selected.
SQL> SELECT * FROM E2
EMPNO ENAME SAL
---------- ---------- ----------
7369 SMITH 900
7566 JONES 3075
7782 CLARK 2550
7839 KING 5100
7902 FORD 3100
7934 MILLER 1400
E1表的前两行是自己的,没有变化,后面的行是e2表追加的。
Merge是update和insert的结合体,有做upate ,没有做insert