使用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中,你一次只能从一个表中删除。