假设我有两个表
CREATE TABLE IF NOT EXISTS "public"."parent" (
parent_id UUID not null,
name TEXT not null,
)
CREATE TABLE IF NOT EXISTS "public"."child" (
child_id UUID not null,
parent_id UUID not null,
name TEXT not null,
CONSTRAINT "child_fk" FOREIGN KEY ("parent_id") REFERENCES "public"."parent"("parent_id")
)
是否可以这样做:
DELETE FROM parent WHERE parent_id IN (DELETE FROM child WHERE name LIKE '%whatever' RETURNING parent_id)
这个查询返回语法错误。虽然从删除查询返回是可能的,所以内部查询是可以的,这意味着周围的查询不能这样工作。
还有谁能解释一下为什么上面的查询是不可能的?
您需要一个CTE("公共表表达式")。您当前的公式是不可能的,因为它返回语法错误。我不认为有什么深刻的原因。
with d as (DELETE FROM child WHERE name LIKE '%whatever' RETURNING parent_id)
DELETE FROM parent WHERE parent_id IN (select * from d)