【问题标题】:Delete records from multiple tables using Join with PostgreSQL使用 Join with PostgreSQL 从多个表中删除记录
【发布时间】:2020-09-15 13:54:08
【问题描述】:

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

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

【问题讨论】:

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

标签: sql postgresql inner-join sql-delete


【解决方案1】:

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

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

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

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2014-12-14
    • 1970-01-01
    • 2015-08-05
    • 2013-01-30
    • 2010-12-27
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多