

本文為英文版的機器翻譯版本，如內容有任何歧義或不一致之處，概以英文版為準。

# 合併為
<a name="merge-into-statement"></a>

有條件地更新、刪除資料列或將其插入至 Apache Iceberg 資料表。單一陳述式可以組合更新、刪除和插入動作。

**注意**  
`MERGE INTO` 是交易型的並且僅由 Athena 引擎版本 3 中的 Apache Iceberg 資料表支援。

## 概要
<a name="merge-into-statement-synopsis"></a>

若要有條件地更新、刪除或插入 Iceberg 資料表中的資料列，請使用下列語法。

```
MERGE INTO target_table [ [ AS ]  target_alias ]
USING { source_table | query } [ [ AS ] source_alias ]
ON search_condition
when_clause [...]
```

*when\$1clause* 是下列其中一項：

```
WHEN MATCHED [ AND condition ]
    THEN DELETE
```

```
WHEN MATCHED [ AND condition ]
    THEN UPDATE SET ( column = expression [, ...] )
```

```
WHEN NOT MATCHED [ AND condition ]
    THEN INSERT (column_name[, column_name ...]) VALUES (expression, ...)
```

`MERGE` 支援具有不同 `MATCHED` 條件之任意數量的 `WHEN` 子句。條件子句會在由 `MATCHED` 狀態和符合條件選取的第一個 `WHEN` 子句中執行 `DELETE`、`UPDATE` 或 `INSERT` 運算。

針對每個來源資料列，會依序處理 `WHEN` 子句。只會執行第一個相符的 `WHEN` 子句。其餘子句會遭到忽略。當單一目標資料表資料列與多個來源資料列相符時，就會引起使用者錯誤。

如果來源資料列不與任何 `WHEN` 子句相符且沒有 `WHEN NOT MATCHED` 子句，則會忽略來源資料列。

在具有 `UPDATE` 運算的 `WHEN` 子句中，資料欄值表達式可以指代目標或來源的任何欄位。若是 `NOT MATCHED`，`INSERT` 表達式可以指代來源的任何欄位。

**範例**  
下列範例會將第二個資料表中的資料列合併至第一個資料表 (如果第一個資料表中不存在資料列)。請注意，`VALUES` 子句中列出的資料欄必須加上來源資料表別名的字首。`INSERT` 子句中列出的目標資料欄*不*得使用字首。

```
MERGE INTO iceberg_table_sample as ice1
USING iceberg2_table_sample as ice2
ON ice1.col1 = ice2.col1
WHEN NOT MATCHED 
THEN INSERT (col1)
      VALUES (ice2.col1)
```

如需更多 `MERGE INTO` 範例，請參閱 [更新 Iceberg 資料表資料](querying-iceberg-updating-iceberg-table-data.md)。