使用单个重复列从 MySQL 数据库中删除重复项 [重复]
Posted
技术标签:
【中文标题】使用单个重复列从 MySQL 数据库中删除重复项 [重复]【英文标题】:Deleting duplicates from a MySQL database with a single duplicate colum [duplicate] 【发布时间】:2013-10-07 02:37:33 【问题描述】:所以我已经阅读了很多关于这个的 Stack Overflow 问题......我真的无法得到我的答案 :(。我只使用 mysql 大约 4 个月,所以我并不完全是一个亲。
不管怎样,我的表中的数据看起来与此类似...
id | user | amount
1 | dillyg10 | 16
2 | dillyg10 | 18
如您所见,用户字段被复制。这种情况在我的数据集中经常发生,虽然我的表很小,只有大约 1000 行。
所以,如果你们能给我一些建议......我将非常感激,也通过你在查询中所做的,我正在努力学习,希望我不必问这样的问题再次 :)。
【问题讨论】:
您表示要删除的两条记录中的哪一条?他们有不同的amount
值。你想怎么做?或者您只是不在乎保留哪条记录?
我要删除表中的第一条记录。
什么定义了两者的第一个记录?
id 最低的那个。
【参考方案1】:
您可以使用以下查询删除重复记录。
DELETE FROM test_table
WHERE ID IN (SELECT MAX (ID)
FROM test_table
GROUP BY user);
【讨论】:
如果每个用户正好有两条重复记录,这是一个解决方案。如果还有更多并且应该还剩下一个,那么将 'where id in' 更改为 'where id not in' 将完成任务。 我尝试过这样做,但出现以下错误:您无法在 FROM 子句中指定目标表 'testingdupes' 进行更新。【参考方案2】:如果您想从每个用户的重复行中删除除具有最大 id 的行之外的所有行,那么您可以这样做
DELETE t
FROM table1 t JOIN
(
SELECT user, MAX(id) id
FROM table1
GROUP BY user
HAVING COUNT(*) > 1
) q
ON t.user = q.user
AND t.id <> q.id
这里是SQLFiddle演示
另一方面,如果您想在重复行中保留最大数量的行
DELETE t
FROM table1 t JOIN
(
SELECT i.id, i.user, i.amount
FROM
(
SELECT user, MAX(amount) amount
FROM table1
GROUP BY user
HAVING COUNT(*) > 1
) p JOIN table1 i
ON p.user = i.user
AND p.amount = i.amount
) q
ON t.user = q.user
AND t.amount <> q.amount
OR (t.amount = q.amount
AND t.id < q.id)
这里是SQLFiddle演示
【讨论】:
@user872129 到底有没有帮助?以上是关于使用单个重复列从 MySQL 数据库中删除重复项 [重复]的主要内容,如果未能解决你的问题,请参考以下文章