删除重复的MySQL条目
我没有看到有人在这个具体问题上寻求帮助 我有一张30万行的桌子。每一行都有一个唯一的id,几个列,但没有时间戳等 我遇到的问题是,用户已经成功地将新数据导入到数据库中,因此现在一些行被复制了 对于存在此问题的行,除了ID之外,还有两行是相同的 是否有任何方法可以搜索整个表,根据名称查找重复的行,并删除具有旧ID的行 我需要确保只删除一个副本,并且只删除旧条目 到目前为止,我已经提出了以下显示重复行的方法删除重复的MySQL条目,mysql,duplicates,mariadb-10.2,Mysql,Duplicates,Mariadb 10.2,我没有看到有人在这个具体问题上寻求帮助 我有一张30万行的桌子。每一行都有一个唯一的id,几个列,但没有时间戳等 我遇到的问题是,用户已经成功地将新数据导入到数据库中,因此现在一些行被复制了 对于存在此问题的行,除了ID之外,还有两行是相同的 是否有任何方法可以搜索整个表,根据名称查找重复的行,并删除具有旧ID的行 我需要确保只删除一个副本,并且只删除旧条目 到目前为止,我已经提出了以下显示重复行的方法 SELECT id, name, COUNT(name) AS cnt FROM Sites
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
SELECT id, name, COUNT(name) AS cnt
FROM Sites
GROUP BY name
HAVING (cnt > 1)
您可以内部联接同一个表
首先,确认要删除的所有行:
从站点t1中选择t1.*
内部连接站点t2
其中t1.name=t2.name
t1.idSELECT 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一起使用?