

Les traductions sont fournies par des outils de traduction automatique. En cas de conflit entre le contenu d'une traduction et celui de la version originale en anglais, la version anglaise prévaudra.

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

Mise à jour, suppression ou insertion conditionnelle de lignes dans une table  Apache Iceberg. Une seule instruction peut combiner des actions de mise à jour, de suppression et d'insertion.

**Note**  
`MERGE INTO` est transactionnel et n'est pris en charge que pour les tables Apache Iceberg dans la version 3 du moteur Athena.

## Résumé
<a name="merge-into-statement-synopsis"></a>

Pour mettre à jour, supprimer ou insérer de manière conditionnelle des lignes d'une table Iceberg, utilisez la syntaxe suivante.

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

*when\$1clause*Il s'agit de l'un des suivants :

```
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` prend en charge un nombre arbitraire de clauses `WHEN` avec des conditions `MATCHED` différentes. Les clauses de condition exécutent l'opération `DELETE`, `UPDATE` ou `INSERT` dans la première clause `WHEN` sélectionnée par l'état `MATCHED` et la condition de correspondance.

Pour chaque ligne source, les clauses `WHEN` sont traitées dans l'ordre. Seule la première clause `WHEN` correspondante est exécutée. Les clauses suivantes sont ignorées. Une erreur utilisateur est signalée lorsqu'une seule ligne de la table cible correspond à plus d'une ligne source.

Si une ligne source ne correspond à aucune clause `WHEN` et qu'il n'y a pas de clause `WHEN NOT MATCHED`, la ligne source est ignorée.

Dans les clauses `WHEN` qui comportent des opérations `UPDATE`, les expressions de valeur de colonne peuvent renvoyer à n'importe quel champ de la cible ou de la source. Dans le cas de `NOT MATCHED`, les expressions `INSERT` peuvent renvoyer à n'importe quel champ de la source.

**Exemple**  
L'exemple suivant fusionne les lignes de la deuxième table dans la première table si elles n'existent pas dans la première table. Notez que les colonnes répertoriées dans la clause `VALUES` doivent être préfixées par l'alias de la table source. Les colonnes cibles répertoriées dans la clause `INSERT` ne doivent *pas* être préfixées.

```
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)
```

Pour obtenir plus d'exemples `MERGE INTO`, consultez [Mise à jour des données de tables Iceberg](querying-iceberg-updating-iceberg-table-data.md).