KAILO

PostgreSQLでJOINした結果をDELETEする

このようなテーブルがあったとする。

猫の名前を扱うcatテーブル

cat_idcat_nameowner_id
1Tama3
2Kuro1
3Momo2

猫の飼い主を扱うownerテーブル

owner_idowner_name
1Tom
2Bob
3Jack

JOINして、Tomさんの飼っている猫の情報だけSELECTする

SELECT a.cat_id, a.cat_name, a.owner_id, b.owner_name
FROM cat a
  LEFT JOIN owner b
  ON a.owner_id = b.owner_id
WHERE b.owner_name = 'Tom';

結果

cat_idcat_nameowner_idowner_name
2Kuro1Tom

Tomさんの飼っている猫の情報だけDELETEする

方法1 USING句を使う

DELETE
FROM cat a USING owner b
WHERE a.owner_id = b.owner_id AND b.owner_name = 'Tom';

方法2 IN句を使う

DELETE
FROM cat
WHERE owner_id IN (SELECT owner_id FROM owner WHERE name = 'Tom');

PostgreSQLでは、USING句で他のテーブルを指定することで、WHERE条件内で他のテーブルを参照することができます。

副問い合わせ形式より結合形式の方が書き易い、あるいは、実行が速くなることがあります。

PostgreSQL 10.5文書

…とのことなので、詳しくは日本語マニュアルのDELETEに関するページを参照してください。