首页  >  文章  >  数据库  >  当目标表位于 FROM 子句中时,如何删除 MySQL 表中的重复行?

当目标表位于 FROM 子句中时,如何删除 MySQL 表中的重复行?

DDD
DDD原创
2024-11-01 11:15:30281浏览

How to Delete Duplicate Rows in a MySQL Table When the Target Table is in the FROM Clause?

从 MySQL 中的表中删除重复行

处理包含重复记录的表时,有必要删除它们以维护数据诚信和效率。在 MySQL 中,实现这一点涉及识别和删除重复行,这个过程可以通过特定查询来完成。

在您的例子中,您已经使用以下查询根据字段 empssn 确定了重复记录:

SELECT COUNT(empssn), empssn FROM employee 
GROUP BY empssn 
HAVING COUNT(empssn) > 1

要删除重复记录,您尝试了以下查询:

DELETE FROM employee 
WHERE (empid, empssn) NOT IN (
    SELECT MIN(empid), empssn FROM employee 
    GROUP BY empssn
);

但是,您遇到了错误,因为 MySQL 不允许在 FROM 子句中指定目标表更新查询。

要解决此问题,一种方法是将子查询包装在派生表中:

DELETE FROM employee 
WHERE (empid, empssn) NOT IN (
    SELECT empid, empssn FROM (
        SELECT MIN(empid) AS empid, empssn FROM employee 
        GROUP BY empssn
    ) X
);

通过使用此修改后的查询,您可以有效地创建临时派生表(X) 包含来自员工表的必要数据。然后,主 DELETE 查询可以引用此派生表,根据 empid 和 empssn 的唯一组合删除重复行。此方法应该可以解决您遇到的错误,并允许您成功删除重复记录。

以上是当目标表位于 FROM 子句中时,如何删除 MySQL 表中的重复行?的详细内容。更多信息请关注PHP中文网其他相关文章!

声明:
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系admin@php.cn