UPDATE
适用于: Databricks SQL Databricks Runtime
更新与谓词匹配的行的列值。 如果未提供谓词,则更新所有行的列值。
只有 Delta Lake 表支持此语句。
语法
UPDATE table_name [table_alias]
SET { { column_name | field_name } = [ expr | DEFAULT } [, ...]
[WHERE clause]
参数
-
标识要更新的表。 表名称不得使用时态规范。
table_name
不得为外表。 table_alias
定义表的别名。 该别名不得包含列的列表。
-
对表中的列的引用。 最多可以引用每列一次。
-
对 STRUCT 类型的列中的字段的引用。 最多可以引用每字段一次。
-
任意表达式。 如果引用
table_name
列,它们表示更新前的行的状态。 DEFAULT
适用于: Databricks SQL Databricks Runtime 11.3 LTS 及更高版本
如果定义了列,则为列的
DEFAULT
表达式,否则为 NULL。-
按谓词筛选行。
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'