mysql - 通过保留表中的最小行来删除重复记录

标签 mysql sql

我有一个表,其中存在重复行,应将其删除,保留其中一个重复行

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/

相关文章:

php - 获取mysql中部分填充的数据

mysql - 为什么 SQL 查询的结果没有按我期望的顺序返回?

sql - 单行 GO(Batch) 语句在 SQL Server 中出错?

php - Mysql - 查找重复值然后只返回最新的值然后如果它返回某个结果则忽略它

php - INSERT 不适用于 PDO 准备好的语句

sql - Presto - 如何将带有 map<string,string> 的字段转换为行

mysql - 在只有几行的表中索引字符串字段是否有意义

php mysql 共享数据到mysql

PHP数组文件插入MySQL

php - 在MAMP中导入文件(文件大小超出允许的最大大小)