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