删除重复的MySQL条目

删除重复的MySQL条目,mysql,duplicates,mariadb-10.2,Mysql,Duplicates,Mariadb 10.2,我没有看到有人在这个具体问题上寻求帮助 我有一张30万行的桌子。每一行都有一个唯一的id,几个列,但没有时间戳等 我遇到的问题是,用户已经成功地将新数据导入到数据库中,因此现在一些行被复制了 对于存在此问题的行,除了ID之外,还有两行是相同的 是否有任何方法可以搜索整个表,根据名称查找重复的行,并删除具有旧ID的行 我需要确保只删除一个副本,并且只删除旧条目 到目前为止,我已经提出了以下显示重复行的方法 SELECT id, name, COUNT(name) AS cnt FROM Sites

我没有看到有人在这个具体问题上寻求帮助

我有一张30万行的桌子。每一行都有一个唯一的id,几个列,但没有时间戳等

我遇到的问题是,用户已经成功地将新数据导入到数据库中,因此现在一些行被复制了

对于存在此问题的行,除了ID之外,还有两行是相同的

是否有任何方法可以搜索整个表,根据名称查找重复的行,并删除具有旧ID的行

我需要确保只删除一个副本,并且只删除旧条目

到目前为止,我已经提出了以下显示重复行的方法

SELECT id, name, COUNT(name) AS cnt
FROM Sites
GROUP BY name
HAVING (cnt > 1)
这将生成id、名称、cnt的输出,并显示有50000个条目要删除。显示的id似乎是旧id

是否需要将其输入delete命令以删除条目


谢谢

假设旧ID是一个较低的值,您可以使用按名称划分的第一个值,因为您不熟悉您的表并按ID排序


假设旧ID是一个较低的值,您可以使用按名称划分的第一个值,而不熟悉您的表并按ID排序


据我所知,表中现在有两个重复的行,您希望删除旧行或id较小的行

您可以内部联接同一个表

首先,确认要删除的所有行:

从站点t1中选择t1.* 内部连接站点t2 其中t1.name=t2.name t1.id 其次,若所有返回的行都正确,现在您可以使用该查询并获取每个ID,并在DELETE语句中使用它

从id为的站点中删除* 从站点t1中选择t1.id 内部连接站点t2 其中t1.name=t2.name t1.id您可以在表中添加或从表中添加更多列,以检查完全重复的行。

据我所知,表中现在有两个重复行,您希望删除旧行或id较小的行

SELECT id, name, COUNT(name) AS cnt
FROM Sites
GROUP BY name
HAVING (cnt > 1)
您可以内部联接同一个表

首先,确认要删除的所有行:

从站点t1中选择t1.* 内部连接站点t2 其中t1.name=t2.name t1.id 其次,若所有返回的行都正确,现在您可以使用该查询并获取每个ID,并在DELETE语句中使用它

从id为的站点中删除* 从站点t1中选择t1.id 内部连接站点t2 其中t1.name=t2.name t1.id您可以在表中添加更多的列以检查完全重复的行。

这似乎对我有效

SELECT id, name, COUNT(name) AS cnt
FROM Sites
GROUP BY name
HAVING (cnt > 1)
DELETE FROM Sites WHERE id IN (
 SELECT * FROM (
  SELECT id FROM Sites GROUP BY name HAVING COUNT(name) >= 2
 ) AS a
);

谢谢

这似乎对我有用

DELETE FROM Sites WHERE id IN (
 SELECT * FROM (
  SELECT id FROM Sites GROUP BY name HAVING COUNT(name) >= 2
 ) AS a
);

谢谢

什么版本的MySQL?5.x还是8.x?这能回答你的问题吗?请参阅接受的答案。是否根据名称查找重复的行并删除具有旧ID的行?正如你所说的,没有时间戳,所以你不能说出旧的。例如,您可以判断是否删除id较低的行。@Akina-您是对的。我已经更新了我的原始票证,我需要删除id较低的重复行。@TheImpaler 10.2.29-Mariadb哪个版本的MySQL?5.x还是8.x?这能回答你的问题吗?请参阅接受的答案。是否根据名称查找重复的行并删除具有旧ID的行?正如你所说的,没有时间戳,所以你不能说出旧的。例如,您可以判断是否删除id较低的行。@Akina-您是对的。我已更新了原始票证,需要删除id较低的重复行。@TheImpaler 10.2.29-Mariadb第一个查询正在运行,但未返回任何内容。实际上几分钟后它还在运行。我的示例需要3秒钟才能找到50k个重复项。有没有办法将其用于Delete?第一个查询正在运行,但没有返回任何内容。实际上几分钟后它还在运行。我的示例需要3秒钟才能找到50k个重复项。有没有办法把它和Delete一起使用?