-1

我需要删除连接表中的条目,其中使用其他表的聚合选择来选择要删除的行(如此处所问。不幸的是 delete 语句失败并且 MySQL/MariaDB 抛出以下错误:

ERROR 1093 (HY000) at line 1: You can't specify target table 'pcld' for update in FROM clause 

我认为支持在同一个表中基于 select 子句删除表中的数据。

MariaDB 版本是“mysql Ver 15.1 Distrib 5.5.65-MariaDB, for Linux (x86_64)”

SQL 脚本

DELETE pcld 
FROM persons_linked_companies as pcld
WHERE pcld.id IN(
    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)
)

此脚本的 SELECT 部分由nbk提供,请参阅此处的答案

4

1 回答 1

1

我想您需要删除与人员相关的记录

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

在您原来的 SQL 中,不能在WHERE子句中再次打开删除/更新表

于 2021-10-12T13:49:13.660 回答