我有一个表,其中存在重复行,应将其删除,保留其中一个重复行
emp 表有一个唯一的约束,其中包括姓名、年龄、性别
以下查询工作正常
SELECT MIN(emp_no)
FROM emp
GROUP BY name, age, sex
HAVING COUNT(1) > 1 INTO @emp_duplicate_ids;
DELETE FROM emp
WHERE emp_no NOT IN(@emp_duplicate_ids);
还有其他捷径或最佳方法来实现这一目标吗?
谢谢
最佳答案
试试这个(在测试数据库中而不是生产中)
DELETE e FROM emp e
JOIN (SELECT MIN(emp_no) AS emp_no FROM emp GROUP BY name, age, sex) f
ON e.name=f.name and e.age =f.age and e.sex=f.sex and e.emp_no <> f.emp_no
关于mysql - 通过保留表中的最小行来删除重复记录,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/22348121/