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