WHEN NOT MATCHED THEN INSERT [(COLUMN{[,COLUMN]})] VALUES(<值表达式>);
```
GBase 8s 的 MERGE 语句是数据操纵语言(DML)语句,将源表对象与目标表或视图结合。您在 ON 关键字之后指定的 condition 决定在目标上的 UPDATE 或 DELETE 操作中使用源对象的哪一行,以及在目标上的 INSERT 操作中使用哪一行。MERGE 语句不更改源对象。
- 如果您指定 Update 和 Insert 两个子句,则 MERGE 语句可在目标对象上执行 INSERT 和 UPDATE 两个操作。
- 如果您指定 Delete 和 Insert 两个子句,则 MERGE 语句可在目标对象上执行 INSERT 和 DELETE 两个操作。
- 如果您未指定 Insert 子句,则不执行 INSERT 操作,但 Update 子句必须在满足该条件的源行的目标对象上指定 UPDATE 操作(抑或 Delete 子句必须指定 DELETE 操作)。
- 如果您未指定 Update 子句且未指定 Delete 子句,则不执行 UPDATE 或 DELETE 操作,但 Insert 子句必须为不匹配该对象的源行指定目标对象上的 INSERT 操作。
- 如果未指定 Delete 子句,未指定 Update 子句,且未指定 Insert 子句,则 MERGE 语句失败并提示错误。
MERGE 语句可对目标对象产生下列影响:
- 如果包括 Update 子句,则 MERGE 语句根据 SET 子句的规范,以源表中该条件取值为真的行的数据更新目标表或视图中的行。
- 如果包括 Delete 子句,则 MERGE 语句从目标表或视图删除该条件取值为真的行。
- 如果包括 Insert 子句,则 MERGE 语句根据 VALUES 子句的规范,以源表中该条件取值为假的行数据,向目标表或视图内插入新行。
然而,单个 MERGE 语句仅可有这三个影响中的两个,因为 Delete 子句与 Update 子句是互斥的。
对于大型表上的操作,请确保在您的系统上可获得这些资源:
- 足够数量的锁
- 用于中间的结合结果的足够的临时 dbspace 存储
- 用于 MERGE 语句的结果的充足的 dbspace 存储。
在高可用性集群配置中,您可从主服务器或从可更新的辅助服务器发出 MERGE 语句。
**举例说明**
**例1** 已有用户表 t_user1 和用户表 t_user2。将 t_user1 表作为目标表,将 t_user2 表作为源表,连接条件为 t_user1 表的 f_userid 与 t_user2 表的 f_userid 相等。当记录匹配连接条件时,将 t_user2 表的 f_age 更新到 t_user1 表的 f_age; 当记录不匹配连接条件时,将 t_user2 表的 f_userid、f_username、f_age 插入一条新记录到 t_user1 表。
```
merge into t_user1 a
using t_user2 b
on a.f_userid = b.f_userid
when matched then update set a.f_age = b.f_age
when not matched then insert (a.f_userid, a.f_username, a.f_age) values(b.f_userid, b.f_username, b.f_age);
```
来自 “ ITPUB博客 ” ,链接:https://blog.itpub.net/70007436/viewspace-2793685/
,如需转载,请注明出处,否则将追究法律责任。