Condividi tramite


UPDATE

Si applica a:segno di spunta sì Databricks SQL segno di spunta sì Databricks Runtime

Aggiorna i valori di colonna per le righe che corrispondono a un predicato. Quando non viene specificato alcun predicato, aggiornare i valori di colonna per tutte le righe.

Questa dichiarazione è supportata solo per le tabelle Delta Lake.

Sintassi

[ common_table_expression ]
  UPDATE table_name [table_alias]
     SET  { { column_name | field_name }  = [ expr | DEFAULT } [, ...]
     [WHERE clause]

Parametri

  • espressione di tabella comune

    Le espressioni di tabella comuni (CTE) sono una o più query denominate che possono essere riutilizzate più volte all'interno del blocco di query principale per evitare calcoli ripetuti o per migliorare la leggibilità di query complesse annidate.

  • table_name

    Identifica la tabella da aggiornare. Il nome della tabella non deve usare una specifica temporale o una specifica delle opzioni.

    table_name non deve essere una tabella straniera.

  • table_alias

    Definire un alias per la tabella. L'alias non deve includere un elenco di colonne.

  • column_name

    Riferimento a una colonna nella tabella. È possibile fare riferimento a ogni colonna al massimo una volta.

  • field_name

    Riferimento al campo all'interno di una colonna di tipo STRUCT. È possibile fare riferimento a ogni campo al massimo una volta.

  • expr

    Espressione arbitraria. Se si fa riferimento alle colonne table_name, esse rappresentano lo stato della riga prima dell'aggiornamento.

  • DEFAULT

    Si applica a:segno di spunta sì Databricks SQL segno di spunta sì Databricks Runtime 11.3 LTS e versioni successive

    L'espressione DEFAULT per la colonna se definita, altrimenti NULL.

  • WHERE

    Filtrare le righe in base al predicato. La WHERE clausola può includere sottoquery con le eccezioni seguenti:

    • Sottoquery annidata, ovvero una sottoquery all'interno di un'altra sottoquery
    • Sottoquery NOT IN all'interno di un OR, ad esempio a = 3 OR b NOT IN (SELECT c from t)

    Nella maggior parte dei casi, è possibile riscrivere NOT IN sottoquery usando NOT EXISTS. È consigliabile usare NOT EXISTS quando possibile, poiché UPDATE con sottoquery NOT IN può essere lento.

Aggiornamento da un'altra tabella o join

Databricks SQL non supporta la UPDATE ... FROM ... JOIN sintassi usata in altri dialetti SQL, ad esempio l'aggiornamento di colonne in una tabella da un join con un'altra tabella. Per aggiornare una tabella in base a un join con un'altra tabella o sottoquery, utilizzare MERGE INTO invece .

Esempi

> UPDATE events SET eventType = 'click' WHERE eventType = 'clk'

> UPDATE all_events
     SET session_time = 0, ignored = true
   WHERE session_time < (SELECT min(session_time) FROM good_events)

> UPDATE orders AS t1
     SET order_status = 'returned'
   WHERE EXISTS (SELECT oid FROM returned_orders WHERE t1.oid = oid)

> UPDATE events
     SET category = 'undefined'
   WHERE category NOT IN (SELECT category FROM events2 WHERE date > '2001-01-01')

> UPDATE events
     SET ignored = DEFAULT
  WHERE eventType = 'unknown'

Nell'esempio seguente viene illustrato come aggiornare una tabella da un join usando MERGE anziché una sintassi non supportata UPDATE ... FROM ... JOIN :

-- Equivalent to (not supported in Databricks): UPDATE t1 SET t1.c1 = t2.c1 FROM t1 INNER JOIN t2 ON t1.c2 = t2.c2
> MERGE INTO t1
  USING t2 ON t1.c2 = t2.c2
  WHEN MATCHED THEN UPDATE SET t1.c1 = t2.c1;