用下面得大佬得语句再mysql7以上得版本中执行会有报错,mysql不允许在查询的同时删除原表数据,如果向删除,必须给原始数据表取一个别名再删除,查询出结果,给结果取别名之后再删除

delete from titles_test where id not in (
select * from
    (
           # 给结果取个别名叫l,这样我们就不是从原始表中查询结果删除而是L表查询结果并删除
        select min(id) from titles_test group by emp_no
    ) l  
);

思路很简单,先用emp_no分组之后,找到最小的得ID

select min(id)
from titles_test
group by emp_no;

再delete筛选出所有不在这里面得id并删除

delete from titles_test
where id not in
(
select min(id)
from titles_test
group by emp_no
);