FC2ブログ

PostgreSQLで親テーブルと子テーブルのレコードを同時に削除する

PostgreSQLのWITH句とRETURNINGを使って、親テーブルのレコードを削除しつつ子テーブルのデータを削除するSQLを書いてみます。
従来ならストアードプロシージャーを使うかSQLを二回発行する必要がありました。
WITH句はサブクエリーに名前を付ける構文です。
RETURNINGは更新系のSQLの実行後に影響のあった行のデータを返すものです。
親を削除した結果を受けて、子のテーブルを削除するのは以下のようなSQLになります。

WITH deleted AS (DELETE FROM t_parent WHERE delete_flag = '1' RETURNING parent_id)
DELETE FROM t_child WHERE parent_id IN (SELECT parent_id FROM deleted)

ちなみにこのSQLが使えるのはPostgreSQL9.1以降です。
スポンサーサイト