在MYSQL服务器中查找重复项并删除它们

在MYSQL服务器中查找重复项并删除它们,mysql,Mysql,我有许多重复的名字,我需要找到并删除它们。 我只想保存usedpoints的最高值,并删除usedpoints值较低的重复项 MYSQL表示例: ============================== | name | points | usedpoints | |----------------------------| | john | 840 | 1200 | | john | 230 | 900 | | jane | 550 | 400

我有许多重复的名字,我需要找到并删除它们。 我只想保存usedpoints的最高值,并删除usedpoints值较低的重复项

MYSQL表示例:

==============================
| name | points | usedpoints |
|----------------------------|
| john | 840    | 1200       |
| john | 230    | 900        |
| jane | 550    | 400        |
| jane | 130    | 245        |
| nick | 130    | 123        |
| nick | 90     | 200        |
==============================

1如果要保留id值最低的行:

DELETE n1 FROM names n1, names n2 WHERE n1.id > n2.id AND n1.name = n2.name
DELETE n1 FROM names n1, names n2 WHERE n1.id < n2.id AND n1.name = n2.name
2如果要保留id值最高的行:

DELETE n1 FROM names n1, names n2 WHERE n1.id > n2.id AND n1.name = n2.name
DELETE n1 FROM names n1, names n2 WHERE n1.id < n2.id AND n1.name = n2.name

您可以使用任何其他字段代替id。

您可以使用行编号删除重复项

;with cte as (
    Select *
          ,RN = Row_Number() over (Partition By Name Order by usedpoints Desc)
     From  YourTable
)
--Delete from cte where RN>1
Select * from cte where RN>1   -- << Remove is satisfied
我认为表名是test。 最后一条select语句实际上是编写delete语句的地方

select o.name, oc.dupeCount, o.usedpoints from MyTable o inner join ( SELECT name, COUNT(*) AS dupeCount FROM MyTable GROUP BY name HAVING COUNT(*) > 1 ) oc on o.name = oc.name

我要用它来查找重复项,但现在我需要删除它们。

您是在Sql Server还是mysql中执行此操作的?标签与标题不匹配。抱歉,mysql editedI不明白。。从MyTable中删除名称检查此项: