问题描述
我正在使用Postgresql 11
数据库,我通过外键T1,T2和T3拥有三个相关的表。
T1和T2之间存在多对多关系,因此我将T3用作联接表。
我正在尝试使用JOIN
通过一个查询从这三个表中删除记录,我尝试过:
DELETE t1,t3,t2 FROM T1 AS t1
INNER JOIN T3 AS t3 ON t1.id = t3.t1_id
INNER JOIN T2 AS t2 ON t2.id = t3.t2_id
WHERE t1.col = 'something';
我使用pgAdmin
运行了此查询,它返回:
ERROR: ERROR: Syntax error near « t1 »
LINE 1: DELETE t1,t2 FROM T1 ...
解决方法
相反,一次删除一个表:
with t1 as (
delete t1
where t1.col = 'something'
returning *
),t3 as (
delete t3
where t3.t1_id in (select id from t1)
returning *
)
delete t2
where t2.id in (select t2_id from t3);
这完全不一样。内部联接要求表之间匹配。但是我认为这是您的意图。