共用方式為


UPDATE

適用於:勾選「是」Databricks SQL 勾選「是」Databricks Runtime

更新符合述詞的行之列值。 如果未提供條件,則更新所有行的欄位值。

只有 Delta Lake 數據表才支援此敘述。

語法

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

參數

  • 通用數據表表達式

    常見的數據表運算式 (CTE) 是一或多個具名查詢,可在主要查詢區塊內重複使用多次,以避免重複計算或改善複雜巢狀查詢的可讀性。

  • table_name

    識別要更新的數據表。 數據表名稱不得使用 時態規格或選項規格

    table_name 不得為外部表。

  • table_alias

    定義數據表的別名。 別名不得包含欄位清單。

  • 欄位名稱

    表格中欄位的參考。 您最多只能參考每個資料行一次。

  • field_name

    結構(STRUCT)類型欄中的欄位參考。 您最多可以參考每個欄位一次。

  • expr

    任意表達式。 如果您參考 table_name 欄位,它們代表更新前該列的狀態。

  • 預設

    適用於:核取記號為「是」 Databricks SQL 核取記號為「是」 Databricks Runtime 11.3 LTS 和更新版本

    如果已定義欄位,則為欄位的 DEFAULT 表示式,否則為 NULL。

  • WHERE

    依述詞篩選數據列。 WHERE 子句可能包含以下例外的子查詢:

    • 巢狀子查詢,也就是位於別的子查詢內的子查詢
    • NOT IN中的OR內部子查詢,例如說a = 3 OR b NOT IN (SELECT c from t)

    在大部分情況下,您可以使用NOT IN來重寫NOT EXISTS子查詢。 您應該盡可能使用 NOT EXISTS,因為使用 UPDATENOT IN 子查詢可能很慢。

從其他資料表更新或加入

Databricks SQL 不支援 UPDATE ... FROM ... JOIN 某些其他 SQL 方言中使用的語法(例如,從連接到另一個資料表更新欄位)。 若要根據與另一個資料表或子查詢的連接更新資料表,請使用 MERGE INTO 代替。

範例

> 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'

以下範例展示了如何用 MERGE 非支援語法(unsupported UPDATE ... FROM ... JOIN syntax)來從連接更新資料表:

-- 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;