sql - 使用 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 ...
我的查询语法有什么问题?我错过了什么吗?
解决方案
相反,一次从一个表中删除:
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);
这并不完全相同。内连接需要表之间的匹配。但我认为这是你的意图。
推荐阅读
- javascript - React Parent 页面需要调用其子页面上的每个方法
- javascript - Nightwatch 升级到 Ubuntu 19.10 后无法启动 Chromium
- javascript - 您如何将客户端 Firebase 云消息传递令牌放入谷歌云功能?
- angular - Angular Universal + Asp Net Core:如何在虚拟目录中提供静态文件
- c# - 创建 VS 解决方案来安装 Python 和相关库
- r - R 和 dplyr:按值范围分组
- java - 使用 Retrofit android 卷曲
- ios - iOS 的 FIONBIO 值是什么,以阻止/取消阻止套接字?
- html - Is it possible to get a direct audio file link from Soundcloud without JS
- python - Reason for parentheses after read, truncate and close commands?