首页/数据/SQL 速查/删除关联数据:多表 DELETE 与 USING
本包目录(311 条)
查询基础33 条连接与子查询40 条聚合与窗口函数54 条函数速查60 条
变更与事务52 条
性能与执行计划72 条

删除关联数据:多表 DELETE 与 USING

按另一张表的条件删除:MySQL 用多表 DELETE ... FROM t1 JOIN t2,PostgreSQL 用 DELETE ... USING。

SQL 速查数据更新于 2026-10-12

MySQL

MySQL
DELETE o
FROM orders o
JOIN refunds r ON r.order_id = o.id
WHERE r.status = 'approved';

PostgreSQL

PostgreSQL
DELETE FROM orders o
USING refunds r
WHERE r.order_id = o.id
  AND r.status = 'approved';
MySQLDELETE 后跟要删的别名清单;写错别名是常见报错(unknown table)
PostgreSQLUSING 列表只写辅助表,别名写在目标表上
风险关联条件不唯一时删的不确定性?—— 删除条件命中即删,先 SELECT 同条件核对行数

易错点

  • MySQL 多表 DELETE 的别名清单决定删哪张表,写错会产生“语句成功但删错表/删零行”
  • 先跑 SELECT 同条件确认待删行,再包事务执行;线上批量删必须有回滚预案

数据来源与参考

  • MySQL 8.0 Reference Manual · DELETE
  • PostgreSQL Documentation · DELETE
​‌‌​​‌​​​‌‌​‌‌‌‌​‌‌​​​‌‌​‌‌‌​​‌‌​​‌​‌‌‌​​‌‌‌​​​‌​‌‌​‌​​‌​‌‌‌​​​‌​‌‌​‌​​‌​‌‌​​​‌‌​‌‌‌​‌​​​‌‌​‌‌‌‌​​‌​‌‌‌​​‌‌​​​‌‌​‌‌​‌‌‌‌​‌‌​‌‌​‌