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

如何基于多表聚合查询结果删除关联表数据,解决MySQL 1093错误

报错原因

你使用的MariaDB 5.5.65版本继承自MySQL 5.5内核,该版本的限制是:不允许在UPDATE/DELETE语句的子查询中直接引用要操作的目标表,因此你直接在IN条件的子句中查询persons_linked_companies表时触发1093错误。

解决方案1:子查询套派生表绕过限制

最简单的修改方式是给内层的子查询额外套一层临时派生表,让数据库将其识别为独立的临时结果集,不会判定为直接引用目标表:

DELETE pcld 
FROM persons_linked_companies as pcld
WHERE pcld.id IN(
    SELECT id FROM (
        SELECT 
            id
        FROM
            persons_linked_companies pcl
        WHERE
            companies_id = (SELECT 
                    c.id
                FROM
                    companies c
                    INNER JOIN entities e ON e.company_id = c.id
                    INNER JOIN persons p ON p.entity_id = e.id
                WHERE
                    p.id = pcl.persons_id)
    ) as tmp
)
解决方案2:用多表DELETE语法优化性能

相比子查询套层的方案,直接使用多表关联DELETE的写法性能更好,也不会触发版本限制:

DELETE pcld
FROM persons_linked_companies pcld
INNER JOIN persons_linked_companies pcl ON pcld.id = pcl.id
INNER JOIN persons p ON p.id = pcl.persons_id
INNER JOIN entities e ON e.id = p.entity_id
INNER JOIN companies c ON c.id = e.company_id
WHERE pcl.companies_id = c.id

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.10.01 00:36:02