

 Amazon Redshift は、パッチ 198 以降、新しい Python UDF の作成をサポートしなくなります。既存の Python UDF は、2026 年 6 月 30 日まで引き続き機能します。詳細については、[ブログ記事](https://aws.amazon.com/blogs/big-data/amazon-redshift-python-user-defined-functions-will-reach-end-of-support-after-june-30-2026/)を参照してください。

# UPDATE
<a name="r_UPDATE"></a>

**Topics**
+ [構文](#r_UPDATE-synopsis)
+ [パラメータ](#r_UPDATE-parameters)
+ [使用に関する注意事項](#r_UPDATE_usage_notes)
+ [UPDATE ステートメントの例](c_Examples_of_UPDATE_statements.md)

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

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

## 構文
<a name="r_UPDATE-synopsis"></a>

```
[ WITH [RECURSIVE] common_table_expression [, common_table_expression , ...] ]
            UPDATE table_name [ [ AS ] alias ] SET column = { expression | DEFAULT } [,...]

[ FROM fromlist ]
[ WHERE condition ]
```

## パラメータ
<a name="r_UPDATE-parameters"></a>

WITH 句  
1 つ以上の *common-table-expressions* を指定する任意の句。「[WITH 句](r_WITH_clause.md)」を参照してください。

 *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 のターゲットテーブルなど、サブクエリ内の任意のテーブルを指定できます。

## 使用に関する注意事項
<a name="r_UPDATE_usage_notes"></a>

テーブル内の多数の行を更新した後: 
+ ストレージ容量を再利用し、行を再ソートするため、テーブルにバキューム処理を実行します。
+ テーブルを分析して、クエリプランナーの統計情報を更新します。

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](r_error_on_nondeterministic_update.md)」を参照してください。

GENERATED BY DEFAULT AS IDENTITY 列を更新できます。GENERATED BY DEFAULT AS IDENTITY として定義された列は、指定した値で更新できます。詳細については、「[GENERATED BY DEFAULT AS IDENTITY](r_CREATE_TABLE_NEW.md#identity-generated-bydefault-clause)」を参照してください。