---
title: "MERGE - OceanBase 数据库 V4.1.0 | OceanBase 文档中心"
description: "MERGE 描述 该语句用来根据一张源表更新一张目标表的数据，可以对目标表进行插入、更新或者删除。 语法 MERGE [hint_options] INTO target_table_name [opt_alias] USING source_table_name [opt_alias] ON (expr) [mer…"
---
切换语言

- 中文站 - 简体中文
- International - English
- 日本站 - 日本語

文档反馈![](https://mdn.alipayobjects.com/huamei_22khvb/afts/img/A*P8CuR4UJ_FkAAAAAAAAAAAAADiGDAQ/original) OceanBase 数据库分布式版 - V 4.1.0

# MERGE

更新时间：2023-07-28 10:45:58

[编辑](https://github.com/oceanbase/oceanbase-doc/edit/V4.1.0/zh-CN/700.reference/400.development-reference/100.sql-syntax/300.common-tenant-of-oracle-mode/900.sql-statement-of-oracle-mode/200.dml-of-oracle-mode/300.merge-of-oracle-mode.md)  

## 描述

该语句用来根据一张源表更新一张目标表的数据，可以对目标表进行插入、更新或者删除。

## 语法

```javascript
MERGE [hint_options] INTO target_table_name [opt_alias]
    USING source_table_name [opt_alias]
    ON (expr)
    [merge_update_clause] [merge_insert_clause]

merge_update_clause:
    WHEN MATCHED THEN UPDATE SET update_asgn_list [WHERE expr] [DELETE WHERE expr]

merge_insert_clause:
    WHEN NOT MATCHED THEN INSERT opt_insert_columns VALUES '(' insert_vals ')' [WHERE expr]

```

## 参数解释

| 参数 | 描述 |
| --- | --- |
| hint_options | 指定 Hint 选项，为可选项。 |
| target_table_name | 指定要更新或插入目标表的表名。 |
| source_table_name | 指定要更新或插入的数据来源的表名。 |
| ON (expr) | 源表和目标表的连接条件。 |
| update_asgn_list | 更新语句的赋值操作。 |
| WHERE expr | 触发更新、删除或者插入操作时的需要满足的条件。 |

## 示例

示例中的表和数据基于以下定义：

```sql
obclient> CREATE TABLE tbl1 (col1 INT, col2 INT);
Query OK, 0 rows affected

obclient> CREATE TABLE tbl2 (col1 INT, col2 INT);
Query OK, 0 rows affected

obclient> INSERT INTO tbl1 VALUES(0, 0),(1, null),(2, null);
Query OK, 3 row affected

obclient> INSERT INTO tbl2 VALUES(1, 1),(2, 20),(3, 3),(4, 40);
Query OK, 4 row affected

obclient> SELECT * FROM tbl1;
+------+------+
| COL1 | COL2 |
+------+------+
|    0 |    0 |
|    1 | NULL |
|    2 | NULL |
+------+------+
3 rows in set

obclient> SELECT * FROM tbl2;
+------+------+
| COL1 | COL2 |
+------+------+
|    1 |    1 |
|    2 |   20 |
|    3 |    3 |
|    4 |   40 |
+------+------+
4 rows in set

```

根据 `tbl2` 的数据更新 `tbl1` 的数据：

- 如果 `tbl1.col1` 在 `tbl2` 中能够找到 `tbl1.col1` 取值相同的行，如果 `tbl1.col2` 取值为空，那么使用 `tbl2.col2` 更新 `tbl1.col2`；如果更新之后 `tbl1.col2 >= 10`，那么删除该行。
 - 如果 `tbl2.col1` 在 `tbl1` 中找不到取值相同的行，将 `tbl2` 中的这行插入到 `tbl1` 中，且只插入满足 `tbl2.col2 < 10` 的行。

```sql
obclient>MERGE INTO tbl1 USING tbl2 ON (tbl1.col1 = tbl2.col1)
       WHEN MATCHED THEN UPDATE SET tbl1.col2 = tbl2.col2 WHERE tbl1.col2 IS NULL DELETE
       WHERE tbl1.col2 >= 10
       WHEN NOT MATCHED THEN INSERT VALUES(tbl2.col1, tbl2.col2)
       WHERE tbl2.col2 < 10;
Query OK, 3 rows affected

obclient> SELECT * FROM tbl1;
+------+------+
| COL1 | COL2 |
+------+------+
|    0 |    0 |
|    1 |    1 |
|    3 |    3 |
+------+------+
3 rows in set

```

 上一篇 下一篇 ![有帮助](https://gw.alipayobjects.com/mdn/ob_asset/afts/img/A*y6ocSqN8cqsAAAAAAAAAAAAAARQnAQ)![无帮助](https://gw.alipayobjects.com/mdn/ob_asset/afts/img/A*BG9IQJyLHF8AAAAAAAAAAAAAARQnAQ)![反馈](https://gw.alipayobjects.com/mdn/ob_asset/afts/img/A*eTWdQKCRKHwAAAAAAAAAAAAAARQnAQ)[AI](https://www.oceanbase.com/obi) 咨询热线
