UPDATE

適用対象:「はい」のチェック マーク Databricks SQL 「はい」のチェック マーク Databricks Runtime

述語に一致する行の列値を更新します。 述語が指定されない場合は、すべての行の列値を更新します。

このステートメントは、Delta Lake テーブルでのみサポートされます。

構文

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

パラメーター

  • table_name

    更新するテーブルを識別します。 テーブル名には、テンポラル仕様を使用できません。

    table_name を外部テーブルにすることはできません。

  • table_alias

    テーブルの別名を定義します。 別名に列リストを含めることはできません。

  • column_name

    テーブル内の列の参照。 各列は 1 回まで参照できます。

  • field_name

    STRUCT 型の列内のフィールドの参照。 各フィールドは 1 回まで参照できます。

  • expr

    任意の式。 table_name 列を参照する場合、更新前の行の状態を表します。

  • DEFAULT

    適用対象:check marked yes Databricks SQL 「はい」のチェックマーク Databricks Runtime 11.3 LTS 以降

    列が定義されている場合は列の DEFAULT 式。それ以外の場合は NULL。

  • WHERE

    行を述語でフィルター処理します。 WHERE 句には、次の例外を除き、サブクエリが含まれる場合があります。

    • 入れ子になったサブクエリ (つまり、別のサブクエリ内のサブクエリ)
    • OR 内の NOT IN サブクエリ (例: a = 3 OR b NOT IN (SELECT c from t))

    ほとんどの場合、NOT EXISTS を使用して NOT IN サブクエリを書き換えることができます。 NOT IN サブクエリを使用した UPDATE は低速になる可能性があるため、可能な限り NOT EXISTS を使用することをお勧めします。

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