(1)delete from test where b in (select t1.b from (select t2.* from test as t2) as t1 group by b HAVING count(*) >1) and a not in (select min(t3.a) from (select t4.* from test as t4) as t3 group by t3.b having count(*)>1 ); 纯sql有点麻烦,上面那条可以实现,但数据一多性能不怎样