UPDATE - Amazon Redshift

UPDATE

如果满足条件,则更新一个或多个表列中的值。

注意

单个 SQL 语句的最大大小为 16MB。

语法

[ WITH [RECURSIVE] common_table_expression [, common_table_expression , ...] ] UPDATE table_name [ [ AS ] alias ] SET column = { expression | DEFAULT } [,...] [ FROM fromlist ] [ WHERE condition ]

参数

WITH 子句

可选子句,指定一个或多个 common-table-expressions。请参阅 WITH 子句

table_name

一个临时或永久表。只有表所有者或对表具有 UPDATE 权限的用户可以更新行。如果您使用 FROM 子句或从表达式或条件中的表进行选择,则必须对这些表具有 SELECT 权限。您不能在此处为表提供别名;不过可以在 FROM 子句中指定别名。

注意

Amazon Redshift Spectrum 外部表为只读。您无法对外部表进行 UPDATE。

alias

目标表的临时备用名称。别名是可选的。AS 关键字始终是可选的。

SET column =

要修改的一个或多个列。未列出的列将保留其当前值。不要将表名包含在目标列的规范中。例如,UPDATE tab SET tab.col = 1 是无效的。

expression

一个定义指定列的新值的表达式。

DEFAULT

使用 CREATE TABLE 语句中分配给列的默认值更新列。

FROM tablelist

您可以通过引用其他表中的信息来更新表。在 FROM 子句中列出其他表,或者将子查询用作 WHERE 条件的一部分。FROM 子句中列出的表可以具有别名。如果您需要在列表中包含 UPDATE 语句的目标表,请使用别名。

WHERE condition

一个可选子句,用于限制对符合条件的行的更新。当条件返回 true 时,将更新指定的 SET 列。条件可以是列上的简单谓词,也可以是基于子查询的结果的条件。

可以在子查询中命名任何表,包括 UPDATE 的目标表。

使用说明

在更新表中的大量行后:

  • 对表执行 Vacuum 操作,以回收存储空间并对行重新排序。

  • 分析表以更新查询计划程序的统计数据。

UPDATE 语句的 FROM 子句中不支持左、右和完整外部联接;它们将返回以下错误:

ERROR: Target table must be part of an equijoin predicate

如果需要指定外部联接,请在 UPDATE 语句的 WHERE 子句中使用子查询。

如果您的 UPDATE 语句需要自联接到目标表,您需要指定联接条件以及限定更新操作的行的 WHERE 子句条件。通常,在将目标表联接到自身或其他表时,最佳实践是使用可明确地将联接条件与限定要更新的行的条件分隔的子查询。

每行具有多个匹配项的 UPDATE 查询会在配置参数 error_on_nondeterministic_update 被设置为 true 时引发错误。有关更多信息,请参阅 error_on_nondeterministic_update

您可以更新 GENERATED BY DEFAULT AS IDENTITY 列。您可以使用您提供的值来更新定义为 GENERATED BY DEFAULT AS IDENTITY 的列。有关更多信息,请参阅 GENERATED BY DEFAULT AS IDENTITY