スポンサーサイト

上記の広告は1ヶ月以上更新のないブログに表示されています。
新しい記事を書く事で広告が消せます。

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以降です。
スポンサーサイト

COMMENTS

COMMENT FORM

TRACKBACK


この記事にトラックバックする(FC2ブログユーザー)

上記広告は1ヶ月以上更新のないブログに表示されています。新しい記事を書くことで広告を消せます。