首页 > 解决方案 > 使用 Join with 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, t3, t2 FROM T1 ...

我的查询语法有什么问题?我错过了什么吗?

标签: sqlpostgresqlinner-joinsql-delete

解决方案


相反,一次从一个表中删除:

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);

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


推荐阅读