UPDATE

适用于:Databricks SQL check marked yes 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

    对表中的列的引用。 最多可以引用每列一次。

  • field_name

    对 STRUCT 类型的列中的字段的引用。 最多可以引用每字段一次。

  • expr

    任意表达式。 如果引用 table_name 列,它们表示更新前的行的状态。

  • DEFAULT

    适用于:check marked yes Databricks SQL SQL 仓库版本 2022.35 或更高版本 check marked yes Databricks Runtime 11.2 及更高版本

    如果定义了列,则为列的 DEFAULT 表达式,否则为 NULL。

  • WHERE

    按谓词筛选行。 WHERE 子句可以包括子查询,但有以下例外:

    • 嵌套子查询,即一个子查询内的另一个子查询
    • OR 中的 NOT IN 子查询,例如 a = 3 OR b NOT IN (SELECT c from t)

    在大多数情况下,可以使用 NOT EXISTS 重写 NOT IN 子查询。 应尽量使用 NOT EXISTS,因为执行带有 NOT IN 子查询的 UPDATE 可能会速度较慢。

示例

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