首页 > 解决方案 > 错误 #1093 - 表被指定了两次,既作为“删除”的目标,又作为数据的单独源

问题描述

我正在尝试删除表中的重复行。电子邮件字段在表中必须是唯一的,才能运行之后的代码。这是我的代码:

DELETE FROM deleteRequests
    WHERE Email NOT IN (
        SELECT MAX(Email)
        FROM deleteRequests
        GROUP BY email);

我得到的错误是:'#1093 - 表'deleteRequests'被指定了两次,既作为'DELETE'的目标,又作为数据的单独源'

我认为问题在于我使用的是 mariadb 10.2(这也意味着我不能使用 WITH CTE)。我无法控制更新它,所以我需要一个解决方法。建议?

标签: sqlphpmyadminmariadb

解决方案


MySQL,MariaDB 不允许在 a DELETEor中再次引用该表UPDATE。一个简单的解决方法是使用JOIN

DELETE dr
    FROM deleteRequests dr LEFT JOIN
         (SELECT MAX(email) as max_email
          FROM deleteRequests
          GROUP BY email
         ) dr2
         ON dr2.email = dr.max_email
    WHERE dr2.max_email IS NOT NULL;

当然,这个查询是没有意义的,因为您正在聚合email并选择最大值——所以所有非NULL电子邮件都会匹配。

也许你想HAVING COUNT(*) = 1在子查询中,。


推荐阅读