2014-03-12 83 views
0

我这里重复的行存在,应该被删除的表离开了重复的行留下最小行的表中删除重复记录

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); 

是否有任何其他短的路还是最好的办法实现这一目标?

感谢

回答

0

试试这个(测试DB不生产)

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 
+0

可否请您检查查询,它并不如预期的工作?抛出错误:在'子句'上的未知列'f.emp_no' – user2323036

+0

编辑解决方案,再试一次。 – har2vey

+0

同样的错误,我正在使用MySQL数据库...请检查在sqlfiddle.com查询是否适用于您.. – user2323036