

 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/)を参照してください。

# DELETE
<a name="r_DELETE"></a>

テーブルから行を削除します。

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

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

```
[ WITH [RECURSIVE] common_table_expression [, common_table_expression , ...] ]
DELETE [ FROM ] { table_name | materialized_view_name }
    [ { USING } table_name, ... ]
    [ WHERE condition ]
```

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

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

FROM  
FROM キーワードは、USING 句が指定されている場合を除き、オプションです。ステートメント `delete from event;` と `delete event;` は、EVENT テーブルからすべての行を削除する操作と同じです。  
テーブルからすべての行を削除するには、テーブルに対して [TRUNCATE](r_TRUNCATE.md) を実行します。TRUNCATE は DELETE よりもはるかに効率的であり、VACUUM および ANALYZE を必要としません。ただし、TRUNCATE では、その操作を実行するトランザクションがコミットされることに注意してください。

 *table\$1name*   
一時テーブルまたは永続的テーブル テーブルの所有者またはテーブルで DELETE 権限を持つユーザーのみが、テーブルから行を削除できます。  
大きなテーブルで制限のない削除操作を実行するには、TRUNCATE コマンドを使用します。「[TRUNCATE](r_TRUNCATE.md)」を参照してください。  
テーブルから多数の行を削除した後:  
+ ストレージ容量を再利用し、行を再ソートするため、テーブルにバキューム処理を実行します。
+ テーブルを分析して、クエリプランナーの統計情報を更新します。

 *materialized\$1view\$1name*   
マテリアライズドビュー。DELETE ステートメントは、[マテリアライズドビューへのストリーミング取り込み](materialized-view-streaming-ingestion.md)に使用されるマテリアライズドビューで機能します。マテリアライズドビューの所有者またはマテリアライズドビューに対する DELETE 権限を持つユーザーのみが、マテリアライズドビューから行を削除できます。  
ユーザーに IGNORE RLS 権限が付与されていない行レベルセキュリティ (RLS) ポリシーでは、ストリーミング取り込みに使用されるマテリアライズドビューで DELETE を実行することはできません。ただし、例外として、DELETE を実行するユーザーに IGNORE RLS が付与されていれば、DELETE は正常に実行されます。詳細については、「[RLS ポリシーの所有権と管理](https://docs.aws.amazon.com/redshift/latest/dg/t_rls_ownership.html)」を参照してください。

USING *table\$1name*, ..。  
USING キーワードは、WHERE 句の条件で追加のテーブルを参照するときに、テーブルリストを導入するために使用されます。例えば、次のステートメントでは、EVENT テーブルと SALES テーブルに対する結合条件を満たす EVENT テーブルから、すべての行を削除します。FROM リストで、SALES テーブル名を明示的に指定する必要があります。  

```
delete from event using sales where event.eventid=sales.eventid;
```
USING 句でターゲットテーブル名を繰り返すと、DELETE 操作が自己結合を実行します。USING 構文で同じクエリを書く代わりに、WHERE 句でサブクエリを使用することもできます。

WHERE *condition*   
削除対象を、条件を満たす行に制限するオプションの句。例えば、列に対する制限条件、結合条件、クエリ結果に基づく条件などがあります。クエリでは、DELETE コマンドのターゲットではないテーブルを参照できます。次に例を示します。  

```
delete from t1
where col1 in(select col2 from t2);
```
条件を指定しない場合、テーブルのすべての行が削除されます。

## 使用に関する注意事項
<a name="r_DELETE-usage"></a>
+ DELETE オペレーションは、次のいずれかに接続された Amazon Redshift ストリーミングマテリアライズドビューで実行されると、排他的ロックを保持します。
  +  1 つの Amazon Kinesis Data Streams 
  +  1 つの Amazon Managed Streaming for Apache Kafka トピック 
  +  Confluent Cloud Kafka トピックなど、サポートされている外部ストリーム 

  詳細については、「[マテリアライズドビューへのストリーミング取り込み](materialized-view-streaming-ingestion.md)」を参照してください。

## 例
<a name="r_DELETE-examples"></a>

CATEGORY テーブルからすべての行を削除します。

```
delete from category;
```

CATEGORY テーブルから CATID 値が 0～9 の行を削除します。

```
delete from category
where catid between 0 and 9;
```

LISTING テーブルから、SELLERID 値が SALES テーブルに存在しない行を削除します。

```
delete from listing
where listing.sellerid not in(select sales.sellerid from sales);
```

次の 2 つのクエリはいずれも、EVENT テーブルへの結合と CATID に対する追加の制限に基づいて、CATEGORY テーブルから 1 行を削除します。

```
delete from category
using event
where event.catid=category.catid and category.catid=9;
```

```
delete from category
where catid in
(select category.catid from category, event
where category.catid=event.catid and category.catid=9);
```

次のクエリは、`mv_cities` マテリアライズドビューからすべての行を削除します。この例で使用しているマテリアライズドビュー名はサンプルです。

```
delete from mv_cities;
```