1.DB2 merge into

 

merge into

DB2 中的 merge into 语句可以将一个表中的数据合并到另一个表中,在合并的同时可以根据条件进行插入、删除、更新等操作,

Merge Into 语句可以实现增量备份,对于新增加的生成数据,直接insert到备份表中, 对于更改过的数据,可以通过取update备份表中的数据实现备份,其实还可以对不满足某些条件的备份数据进行delete操作;

1
2
3
4
5
6
7
MERGE INTO [table_a]
USING [table_b]
ON [table_a和table_b的关联条件]
WHEN MATCH THEN
执行语句(默认对A)
WHEN NOT MATCHED THEN
执行语句(默认对A)

(1) into子句

在into子句中指定所要修改或者插入数据的目标表

(2) using子句

在using子句中指定用来修改或者插入的数据源。数据源可以是表、视图或者一个子查询语句。

(3) on子句

在on子句中指定执行插入或者修改的满足条件。

(4) when matched | not matched

用该子句通知数据库如何对满足或不满足条件的结果做出相应的操作。可以使用以下的两类子句。

有数据就更新或删除,无数据就插入

1
WHEN MATCHED THEN

MATCHED 的情况下,只有 UPDATE 和 DELETE 语句可以使用,不能使用 INSERT 语句。

1
WHEN NOTE MATCHED THEN

NOTE MATCHED 的情况下,不能使用 UPDATE 和 DELETE 语句,只可以使用 INSERT 语句。

1
WHEN [NOT] MATCHED AND ( ... AND ... OR ... ) THEN

除了使用默认的 MATCHED / NOT MATCHED 以外,还可以指定额外的判断条件,但与 MATCHED 并列的条件只能用 AND ,而 AND 里面可以使用 AND 和 OR。

(5) merge_update子句

merge_update子句执行对目标表中的字段值修改。当在符合on子句条件的情况下执行。如果修改子句执行,则目标表上的修改触发器将被触发。

(6) merge_insert 子句

merge_insert子句执行当不符合on子句条件时,往目标表中插入数据。如果插入子句执行,则目标表上插入触发器将被触发。

示例1:

1
2
3
4
5
6
7
merge into tab_a a 
using (select id,name,category from tab_b b)
on (a.id = b.id)
when matched then
update set a.name = b.name
when not matched then
insert values(b.id, b.name, b.category);

示例2:

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
MERGE INTO TABLE_A A
USING TABLE_B B
ON A.CUST_CORE_NO = B.CUST_CORE_NO AND A.RI_TYPE = B.RI_TYPE
WHEN MATCHED THEN
UPDATE SET
A.PRIORITY = B.PRIORITY,
A.RI_DATA = B.RI_DATA,
A.IDU_FLAG = 'U',
WHEN NOT MATCHED THEN
INSERT
(
A.CUST_CORE_NO,
A.RI_TYPE,
A.IDU_FLAG
)
VALUES
(
B.CUST_CORE_NO,
B.RI_TYPE,
'I'
)
;