引數說明:
INTO子句:指定更新或插入的目標表。
target_table_name :目標表的表名。
target_alias :目標表的別名。
USING子句:指定源表,源表可以為表、檢視或子查詢。
ON子句:關聯條件,用於指定目標表和源表的關聯條件。
WHEN MATCHED子句:當源表和目標表中資料針對關聯條件可以匹配上時,選擇WHEN MATCHED子句進行UPDATE操作。
WHEN NOT MATCHED子句:當源表和目標表中資料針對關聯條件無法匹配時,選擇WHEN NOT MATCHED子句進行INSERT操作。不支援INSERT子句中包含多個VALUES。
DEFAULT用對應欄位的預設值填充該欄位。如果沒有預設值,則為NULL。
WHERE condition: UPDATE子句和INSERT子句的條件,只有在條件滿足時才進行更新操作,可預設。
示例
CREATE TABLE target ( id integer primary key , name char(20) , altitude int, address char(20) not null ); CREATE TABLE source ( id integer primary key , name char(20) , altitude int, address char(20) not null ); INSERT INTO target values(1,'a', 90, 'shanghai'); INSERT INTO target values(2,'i', 100, 'xianyang'); INSERT INTO target values(5,'c', 99,'chengdu'); insert into source values(1,'a', 90, 'nanjing'); insert into source values(3,'d', 80, 'hangzhou'); -- 將target中和source匹配的記錄的address欄位 更新為source中的address值 MERGE INTO target t USING source AS s ON t.id = s.id WHEN MATCHED THEN UPDATE SET address = s.address; table target; id | name | altitude | address ----+----------------------+----------+---------------------- 1 | a | 90 | shanghai 2 | i | 100 | xianyang 5 | c | 99 | chengdu (3 rows) -- 將source中不存在於target的記錄插入到target中 MERGE INTO target t USING source AS s ON t.id = s.id WHEN NOT MATCHED THEN INSERT VALUES(s.id, s.name, s.altitude, s.address); table target; id | name | altitude | address ----+----------------------+----------+---------------------- 2 | i | 100 | xianyang 5 | c | 99 | chengdu 1 | a | 90 | nanjing 3 | d | 80 | hangzhou (4 rows)