UPDATE - Amazon Redshift

UPDATE

条件が満たされた場合、1 つまたは複数のテーブル列の値を更新します。

注記

単一 SQL ステートメントの最大サイズは 16 MB です。

構文

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

パラメータ

WITH 句

1 つ以上の common-table-expressions を指定する任意の句。「WITH 句」を参照してください。

table_name

一時テーブルまたは永続的テーブル テーブルの所有者またはテーブルに関する UPDATE 権限を持っているユーザーだけが行を更新できます。FROM 句を使用したり、式または条件でテーブルを選択する場合、そのテーブルに関する SELECT 権限を所有している必要があります。ここではテーブルにエイリアスを指定することはできません。ただし、FROM 句内でエイリアスを指定することはできます。

注記

Amazon Redshift Spectrum の外部テーブルは読み込み専用です。外部テーブルを UPDATE することはできません。

alias

ターゲットテーブルの一時的な代替名。エイリアスはオプションです。AS キーワードは常にオプションです。

SET column =

修正する 1 つまたは複数の列。一覧表示されていない列は現在の値を保持します。ターゲット列の仕様にテーブル名を含めないでください。たとえば、UPDATE tab SET tab.col = 1は無効です。

expression

指定された列の新しい値を定義する式。

DEFAULT

CREATE TABLE ステートメントで列に割り当てられたデフォルト値を使って、列を更新します。

FROM tablelist

他のテーブルの情報を参照することで、テーブルを更新できます。FROM 句の他のテーブルを一覧表示するか、WHERE 条件の一部としてサブクエリを使用します。FROM 句で一覧表示されているテーブルには、エイリアスを設定することができます。リスト内に UPDATE ステートメントのターゲットテーブルを含める必要がある場合は、エイリアスを使用します。

WHERE condition

条件と一致する行への更新を制限するオプション句。条件が true を返した場合、指定された SET 列が更新されます。条件は列に関するシンプルな述語の場合もあれば、サブクエリの結果に基づく条件の場合もあります。

UPDATE のターゲットテーブルなど、サブクエリ内の任意のテーブルを指定できます。

使用に関する注意事項

テーブル内の多数の行を更新した後:

  • ストレージ容量を再利用し、行を再ソートするため、テーブルにバキューム処理を実行します。

  • テーブルを分析して、クエリプランナーの統計情報を更新します。

Left、right、および full 外部結合は、UPDATE ステートメントの FROM 句ではサポートされず、以下のエラーを返します。

ERROR: Target table must be part of an equijoin predicate

外部結合を指定する必要がある場合は、UPDATE ステートメントの WHERE 句でサブクエリを使用します。

UPDATE ステートメントでターゲットテーブルへの自己結合が必要な場合、更新操作の対象となる行を限定する WHERE 句の基準だけでなく、結合条件も指定する必要があります。一般的に、ターゲットテーブルを自分または他のテーブルに結合する場合のベストプラクティスは、アップデータ対象の行を限定する基準と、結合条件を明確に分離するサブクエリを使用することです。

行ごとに複数の一致がある UPDATE クエリは、構成パラメータ error_on_nondeterministic_updatetrue に設定されている場合にエラーをスローします。詳細については、「error_on_nondeterministic_update」を参照してください。

GENERATED BY DEFAULT AS IDENTITY 列を更新できます。GENERATED BY DEFAULT AS IDENTITY として定義された列は、指定した値で更新できます。詳細については、「GENERATED BY DEFAULT AS IDENTITY」を参照してください。