首页 > 删除重复的数据(主键不同,保留主键最大的一个)

删除重复的数据(主键不同,保留主键最大的一个)

例如:id date num no name

  1     2009-8-1  0002    015   张三
  2     2009-8-1  0002    015   张三
  3     2009-8-1  0002    015   张三
  4     2016-7-6  0008    098   李四
  

需要删除id为1和2的重复记录,然后保留id为3(重复数据中id最大的那一个)的数据;
操作完成后 有id为3 和 4 的记录。


DELETE FROM table WHERE id IN (
SELECT id FROM (SELECT id FROM table b WHERE (b.date, b.num, b.no) IN (SELECT date, num, no FROM table GROUP BY date, num, no HAVING COUNT(*) > 1) AND id NOT IN (SELECT max(id) FROM table GROUP BY date, num, no HAVING COUNT(*) > 1) AS tt)

我没测试,不确保上面的 sql 完全正确!
可以先把 DELETE 改成 SELECT * 看看查出来的数据符不符合要求,大概思路就是这个,用 HAVING;


查询所有符合条件的结果,主键顺序,获取行数,删除前几行

【热门文章】
【热门文章】