

Le traduzioni sono generate tramite traduzione automatica. In caso di conflitto tra il contenuto di una traduzione e la versione originale in Inglese, quest'ultima prevarrà.

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

Aggiorna, elimina o inserisce in modo condizionale righe in una tabella Apache Iceberg. Una singola istruzione può combinare operazioni di aggiornamento, eliminazione e inserimento.

**Nota**  
L'istruzione `MERGE INTO` è transazionale ed è supportata solo per le tabelle Apache Iceberg nella versione 3 del motore Athena.

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

Per aggiornare, eliminare o inserire in modo condizionale righe di una tabella Iceberg, utilizza la sintassi seguente.

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

*when\$1clause*È una delle seguenti:

```
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` supporta un numero arbitrario di clausole `WHEN` con condizioni `MATCHED` diverse. Le clausole condizionali eseguono l'operazione `DELETE`, `UPDATE` o `INSERT` nella prima clausola `WHEN` selezionata dallo stato `MATCHED` e dalla condizione corrispondente.

Per ogni riga di origine, le clausole `WHEN` vengono elaborate in ordine. Viene eseguita solo la prima clausola `WHEN` corrispondente. Le clausole successive vengono ignorate. Viene generato un errore utente quando una singola riga della tabella di destinazione corrisponde a più di una riga di origine.

Se una riga di origine non corrisponde ad alcuna clausola `WHEN` e non è presente alcuna clausola `WHEN NOT MATCHED`, la riga di origine viene ignorata.

Nelle clausole `WHEN` che prevedono operazioni `UPDATE`, le espressioni dei valori delle colonne possono fare riferimento a qualsiasi campo della destinazione o dell'origine. Nel caso di `NOT MATCHED`, le espressioni `INSERT` possono fare riferimento a qualsiasi campo dell'origine.

**Esempio**  
L'esempio seguente unisce le righe della seconda tabella alla prima tabella se le righe non esistono nella prima tabella. Tieni presente che le colonne elencate nella clausola `VALUES` devono essere precedute dall'alias della tabella di origine. Le colonne di destinazione elencate nella clausola `INSERT` *non* devono avere questo prefisso.

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

Per ulteriori esempi `MERGE INTO`, consulta [Aggiornare dati di tabelle Iceberg](querying-iceberg-updating-iceberg-table-data.md).