使用PostgreSQL连接从多个表中删除记录

问题描述

我正在使用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);

这完全不一样。内部联接要求表之间匹配。但是我认为这是您的意图。