天天看點

sql merge的用法

MERGE操作用于實作資料的合并-根據條件在表中執行資料的更新或插入操作,如果要插入的記錄在目标表中已經存在,則執行更新操作、否則執行插入操作。其文法格式如下:

MERGE INTO target_table [alias]

USING (source_table | view | sub_query) [alias]

ON (join_condition)

WHEN MATCHED THEN

UPDATE SET column1 = column1_value, column2 = column2_value

WHEN NOT MATCHED THEN

INSERT (column_list) VALUES (column_values);

其中,target_table 用于指定要将資料合并到的目标表,source_table(view,sub_query)為提供資料的源表(視圖或子查詢),ON子句用于指定合并操作中資料的連接配接條件。針對源表中的每一條記錄,如果在目标表中找到與其相應的記錄(符合連接配接條件的記錄),則執行WHEN MATCHED THEN分支的UPDATE語句,修改目标表中相應記錄;否則執行WHEN NOT MATCHED THEN分支的INSERT語句,将源表的目前記錄插入到目标表中。

例子:兩個表分别是

SQL> select * from test1;

     EMPNO NAME

---------- --------------------

 1 zhang

 5 guo

 8 qi

10 song

SQL> select * from test;

ID NAME

---------- --------------------

 8 wang

 5 li

然後執行下面語句

merge into test

using test1

on (test1.id=test.id)

when matched then

update set test.name=test1.name

when not matched then

insert (test.id,test.name) values(test1.id,test1.name)

其結果如下:

SQL> select * from test;

ID NAME

---------- --------------------

 8 qi

 1 zhang

10 song

 5 guo

sql