解决思路
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不会出现此问题。