【PostgreSQL】DELETE文のFROM句ではJOINが使えない
#PostgreSQL #SQL #RDB
PostgreSQLでは以下のようなことができない。(MySQLだと、実行できたような気がする)
例えば「子が存在しない親レコードは削除する」ケース。
code:sql
DELETE
p
FROM
parent p
LEFT OUTER JOIN
child c
ON
p.parent_id = c.parent_id
WHERE
c.parent_id IS NULL
PostgreSQLはFROM句で JOIN が使えないので、代わりに USING を使用する。
code:sql
DELETE FROM
parent p
USING
child c
WHERE
p.parent_id != c.parent_id
まぁ、こんな単純なケースなら、WHERE句で EXISTSやNOT EXISTS使えばいいんだけど。
code:sql
DELETE FROM parent WHERE NOT EXISTS (SELECT * FROM child WHERE child.parent_id = parent.parent_id);