lightdb的merge into使用介紹

Hanson69發表於2022-04-13

MERGE 操作可以將源表和目標表中的記錄進行合併,當源表和目標表的記錄匹配時,對匹配的記錄可以進行更新操作,

當源表和目標表的記錄不匹配時,可以將源表中不匹配的記錄插入到目標表中。但是必須對目標表擁有 INSERT 和 UPDATE 許可權,對源表擁有SELECT 許可權。

具體語法定義如下:

MERGE INTO target_table_name [ [ AS ] target_alias ]
USING data_source
ON join_condition
when_clause [...]
where data_source is
{ source_table_name |
( source_query )
}
[ [ AS ] source_alias ]
and when_clause is
{ WHEN MATCHED THEN { merge_update } |
WHEN NOT MATCHED THEN { merge_insert }
}
and merge_insert is
INSERT [( column_name [, ...] )]
{ VALUES ( { expression | DEFAULT } [, ...] ) | DEFAULT VALUES
}
[ WHERE condition ]
and merge_update is
UPDATE SET { column_name = { 
    expression | DEFAULT } |
( column_name [, ...] ) = ( { 
    expression | DEFAULT } [, ...] )
} [, ...]
[ WHERE condition ]



引數說明:

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)



來自 “ ITPUB部落格 ” ,連結:http://blog.itpub.net/69982913/viewspace-2886973/,如需轉載,請註明出處,否則將追究法律責任。

相關文章