You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

PostgreSQL执行两张表关联删除SQL时出现INNER附近语法错误

报错原因

你使用的带INNER JOIN的DELETE语法是MySQL的特有实现,PostgreSQL不支持该写法,因此会触发语法校验错误。


修复方案

根据你的删除需求可以选择对应实现:

场景1:仅删除TABLE1中满足关联条件的记录

可以用PostgreSQL原生支持的USING子句实现关联过滤,写法如下:

DELETE FROM TABLE1
USING TABLE2
WHERE TABLE1.id = TABLE2.id
AND TABLE1.id = '21306';

也可以用通用的EXISTS子查询实现,兼容性更强:

DELETE FROM TABLE1
WHERE id = '21306'
AND EXISTS (SELECT 1 FROM TABLE2 WHERE TABLE2.id = TABLE1.id);

场景2:需要同时删除两张表中对应ID的记录

因为两张表存在主外键关联,默认需要先删除从表数据再删除主表数据,或者开启外键级联删除属性:

  • 方法1:分两次显式删除(推荐,逻辑可控)
-- 先删除从表记录,注意将TABLE2替换为实际的从表名
DELETE FROM TABLE2 WHERE id = '21306';
-- 再删除主表记录
DELETE FROM TABLE1 WHERE id = '21306';
  • 方法2:开启外键级联删除,单次操作自动关联删除
    首先修改表结构给外键添加级联删除属性(仅需执行一次):
ALTER TABLE TABLE2
ADD CONSTRAINT fk_table2_table1_id
FOREIGN KEY (id) REFERENCES TABLE1(id)
ON DELETE CASCADE;

后续直接删除主表数据即可自动触发从表关联数据删除:

DELETE FROM TABLE1 WHERE id = '21306';

内容的提问来源于stack exchange,提问作者Dungeon wolf

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.09.25 01:45:03