

# MERGE INTO
<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` 句のみが実行されます。後続の句は無視されます。1 つのターゲットテーブル行が複数のソース行と一致すると、ユーザーエラーが発生します。

ソース行がどの `WHEN` 句にも一致せず、`WHEN NOT MATCHED` 句がない場合、そのソース行は無視されます。

`UPDATE` 演算を含む `WHEN` 句では、列値の式はターゲットまたはソースの任意のフィールドを参照できます。`NOT MATCHED` の場合、`INSERT` の式はソースの任意のフィールドを参照できます。

**例**  
次の例では、行が最初のテーブルに存在しない場合、2 番目のテーブルの行を最初のテーブルにマージしています。`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)」を参照してください。