前提・実現したいこと
PostgreSQLで以下のような親子関係を持っているテーブルにおいて、Aのテーブルのレコードを削除したいです。
外部キー制約がある場合、子から削除しないといけないのは理解しましたが、DELETE文でまとめて親と子を削除する方法が分かりません。
教えていただけるとありがたいです。
テーブルの親子関係
A Bの親 ↓ B Aの子でありCの親 ↓ C Bの子

回答2件
あなたの回答
tips
プレビュー
ファイルシステムからファイル、データベースからレコードを削除することまたはメモリ内のオブジェクトの割り当てを取り消すことをさします。もしくは、HTTPプロトコルのDELETEを指すこともあります。
PostgreSQLはオープンソースのオブジェクトリレーショナルデータベース管理システムです。 Oracle Databaseで使われるPL/SQLを参考に実装されたビルトイン言語で、Windows、 Mac、Linux、UNIX、MSなどいくつものプラットフォームに対応しています。
SQL(Structured Query Language)は、リレーショナルデータベース管理システム (RDBMS)のデータベース言語です。大きく分けて、データ定義言語(DDL)、データ操作言語(DML)、データ制御言語(DCL)の3つで構成されており、プログラム上でSQL文を生成して、RDBMSに命令を出し、RDBに必要なデータを格納できます。また、格納したデータを引き出すことも可能です。
データベースとは、データの集合体を指します。また、そのデータの集合体の共用を可能にするシステムの意味を含めます
ファイルシステムからファイル、データベースからレコードを削除することまたはメモリ内のオブジェクトの割り当てを取り消すことをさします。もしくは、HTTPプロトコルのDELETEを指すこともあります。
PostgreSQLはオープンソースのオブジェクトリレーショナルデータベース管理システムです。 Oracle Databaseで使われるPL/SQLを参考に実装されたビルトイン言語で、Windows、 Mac、Linux、UNIX、MSなどいくつものプラットフォームに対応しています。
SQL(Structured Query Language)は、リレーショナルデータベース管理システム (RDBMS)のデータベース言語です。大きく分けて、データ定義言語(DDL)、データ操作言語(DML)、データ制御言語(DCL)の3つで構成されており、プログラム上でSQL文を生成して、RDBMSに命令を出し、RDBに必要なデータを格納できます。また、格納したデータを引き出すことも可能です。
データベースとは、データの集合体を指します。また、そのデータの集合体の共用を可能にするシステムの意味を含めます
0グッド
0クリップ
投稿2021/10/12 02:54
PostgreSQLで以下のような親子関係を持っているテーブルにおいて、Aのテーブルのレコードを削除したいです。
外部キー制約がある場合、子から削除しないといけないのは理解しましたが、DELETE文でまとめて親と子を削除する方法が分かりません。
教えていただけるとありがたいです。
A Bの親 ↓ B Aの子でありCの親 ↓ C Bの子
気になる質問をクリップする
クリップした質問は、後からいつでもMYページで確認できます。
またクリップした質問に回答があった際、通知やメールを受け取ることができます。
バッドをするには、ログインかつ
こちらの条件を満たす必要があります。
回答2件
0
DELETE文でまとめて親と子を削除する方法
子は親の道連れになるように定義する。
$ psql > create table parent(id int primary key, value text); > create table child(parentId int REFERENCES parent(id) ON DELETE CASCADE, value text); > insert into parent values (1, 'aa'), (2, 'bb'); > insert into child values (1, 'xx'), (1, 'yy'), (2, 'zz'); > select * from parent; id | value ----+------- 1 | aa 2 | bb (2 rows) > select * from child; parentid | value ----------+------- 1 | xx 1 | yy 2 | zz (3 rows) > delete from parent where id = 2; > select * from parent; id | value ----+------- 1 | aa (1 row) > select * from child; parentid | value ----------+------- 1 | xx 1 | yy (2 rows)
投稿2021/10/12 03:21
総合スコア4141
0
ベストアンサー
参照整合性による連鎖削除の方法が取れない場合は、WITH式によって異なる操作を同時に行うことが出来ます。
7.8.2. WITH内のデータ変更文
with c_del as ( delete from c where xxxx returning * ) , b_del as ( delete from b where キー in (select 親のキー from c_del) returning * ) delete from a where キー in (select 親のキー from b_del)
投稿2021/10/12 04:25
総合スコア25430
バッドをするには、ログインかつ
こちらの条件を満たす必要があります。
2021/10/12 05:15 編集
あなたの回答
tips
太字
斜体
打ち消し線
見出し
引用テキストの挿入
コードの挿入
リンクの挿入
リストの挿入
番号リストの挿入
表の挿入
水平線の挿入
プレビュー
質問の解決につながる回答をしましょう。 サンプルコードなど、より具体的な説明があると質問者の理解の助けになります。 また、読む側のことを考えた、分かりやすい文章を心がけましょう。
バッドをするには、ログインかつ
こちらの条件を満たす必要があります。
2021/10/12 04:23