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_update
が true に設定されている場合にエラーをスローします。詳細については、「error_on_nondeterministic_update」を参照してください。
GENERATED BY DEFAULT AS IDENTITY 列を更新できます。GENERATED BY DEFAULT AS IDENTITY として定義された列は、指定した値で更新できます。詳細については、「GENERATED BY DEFAULT AS IDENTITY」を参照してください。