使用Join with PostgreSQL从多个表中删除记录

使用Join with PostgreSQL从多个表中删除记录,sql,postgresql,inner-join,sql-delete,Sql,Postgresql,Inner Join,Sql Delete,我使用的是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';

我使用的是
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, t3, 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);

这并不完全相同。内部联接需要表之间的匹配。但我认为这是你的意图。

在Postgres中,你一次只能从一个表中删除。