

# MERGE INTO
<a name="querying-iceberg-merge-into"></a>

有条件地更新行、删除行或将行插入到 Iceberg 表中。单个语句可以组合更新、删除和插入操作。有关语法，请参阅 [MERGE INTO](merge-into-statement.md)。

**注意**  
`MERGE INTO` 是事务性的，仅支持用于 Athena 引擎版本 3 中的 Apache Iceberg 表。

以下示例从表 `t` 中删除源表 `s` 中的所有客户。

```
MERGE INTO accounts t USING monthly_accounts_update s
ON t.customer = s.customer
WHEN MATCHED
THEN DELETE
```

以下示例使用源表 `s` 中的客户信息更新目标表 `t`。如果表 `t` 与表 `s` 中的客户行匹配，则该示例会增加表 t 中的购买量。如果表 `t` 与表 `s` 中的客户行不匹配，则该示例会将表 `s` 的客户行插入到表 `t` 中。

```
MERGE INTO accounts t USING monthly_accounts_update s
    ON (t.customer = s.customer)
    WHEN MATCHED
        THEN UPDATE SET purchases = s.purchases + t.purchases
    WHEN NOT MATCHED
        THEN INSERT (customer, purchases, address)
              VALUES(s.customer, s.purchases, s.address)
```

以下示例使用源表 `s` 中的信息有条件地更新目标表 `t`。该示例删除了源地址为 Centreville 的所有匹配的目标行。对于所有其他匹配的行，该示例会添加源采购并将目标地址设置为源地址。如果目标表中没有匹配项，该示例会插入源表中的行。

```
MERGE INTO accounts t USING monthly_accounts_update s
    ON (t.customer = s.customer)
    WHEN MATCHED AND s.address = 'Centreville'
        THEN DELETE
    WHEN MATCHED
        THEN UPDATE
            SET purchases = s.purchases + t.purchases, address = s.address
    WHEN NOT MATCHED
        THEN INSERT (customer, purchases, address)
              VALUES(s.customer, s.purchases, s.address)
```