mysql 删除表里重复的数据,只留下一条记录

解决思路

1.首先判断哪些是重复记录。
2.拿出重复记录中的一条。
3.删除这条记录。

思路实现过程及遇到问题

1.首先判断哪些是重复记录。

SELECT itemID,Id FROM people GROUP BY itemID HAVING count(1) > 1

2.拿出重复记录中的一条。

SELECT min(Id) FROM people GROUP BY itemID HAVING count(1) > 1

3.删除这条记录。

DELETE FROM people WHERE Id IN ( SELECT itemID,Id FROM people GROUP BY itemID HAVING count(1) > 1 ) AND Id NOT IN ( SELECT min(Id) FROM people GROUP BY itemID HAVING count(1) > 1 )

这时,Navicat报错为:

You can't specify target table 't_map_hll_order' for update in FROM clause

意思就是说你不能在一张表里查出数据,再删除这张表的数据。
然后又思考别的方法,就用了一个比较笨的方法:
1.先把重复数据的一条的id存到另一张表。

INSERT into t_id (id) (SELECT MIN(Id) from t_map_hll_mark GROUP BY itemID)

2.从新表中读出id作为依据删除原表的数据。

DELETE FROM people WHERE id in ( SELECT id FROM t_id )

注意

1.在对数据库进行删除或者更新操作的时候最好开启事务。
2.上面我遇到的问题只有在mysql中有,MSSQL和Oracle不会出现此问题。

    原文作者:tang_xiaotang
    原文地址: https://blog.csdn.net/tang_xiaotang/article/details/81112180
    本文转自网络文章,转载此文章仅为分享知识,如有侵权,请联系博主进行删除。
点赞