比如有一张表game 里面有
id name
1 消消乐
2 消消乐
3 飞车
现在删除重复的数据,理想的结果应该是
1 消消乐
3 飞车
下面就是sql
先查看需要删除的数据,删除的时候把select改成delete就可以了
select * FROM game WHERE name IN ( SELECT t.name FROM ( SELECT name FROM game GROUP BY name HAVING count(1) > 1 ) t ) AND id NOT IN ( SELECT dt.idtmp FROM ( SELECT min(id) AS idtmp FROM game GROUP BY name HAVING count(1) > 1 ) dt );
中心思想:就是先找到重复的记录大于1的所有数据,
把这些数据列出来,就是上面的in ()
然后需要保留一条,在这里我们根据id保留最小的一条,让id不等于其他数据的id
也就是下面的id not in
一整合,就出来了