删除重复的 MySQL 个条目
Remove duplicate MySQL entries
我还没有看到有人就这个具体问题寻求帮助。
我有一个 table,里面有 300,000 行。每行都有一个唯一的 id,几列,但没有时间戳等。
我遇到的问题是用户已设法将新数据导入数据库,因此现在有些行是重复的。
对于有此问题的行,有 2 行除了 ID 外完全相同。
有没有办法搜索整个 table,根据名称找到重复的行并删除具有旧 ID 的行?
我需要确保只删除一个重复项,并且只删除旧条目。
到目前为止,我已经想出了以下显示重复行的内容。
SELECT id, name, COUNT(name) AS cnt
FROM Sites
GROUP BY name
HAVING (cnt > 1)
这会产生 id
、name
、cnt
的输出,并显示有 50,000 个条目要删除。显示的 ID 似乎是旧 ID。
是否可以将其输入删除命令以删除条目?
谢谢
假设旧 ID 的值较低,您可以使用 FIRST_VALUE
按名称分区(不熟悉您的 table)并按 ID 排序。
据我了解,现在 table 中有两行重复,您想删除旧行或 ID 较小的行。
您可以 INNER JOIN
相同 table。
首先,确认要删除的所有行:
SELECT t1.* FROM Sites t1
INNER JOIN Sites t2
WHERE t1.name = t2.name
AND t1.id < t2.id
这应该只有 return 个 ID 较小的原始行
其次,如果所有 returned 行都是正确的,现在您可以使用该查询并获取每个 ID 并在 DELETE
语句
中使用它
DELETE * FROM Sites WHERE id IN (
SELECT t1.id FROM Sites t1
INNER JOIN Sites t2
WHERE t1.name = t2.name
AND t1.id < t2.id
)
您可以使用 table 中的 AND
添加更多列,以检查完全重复的行。
这似乎对我有用。
DELETE FROM Sites WHERE id IN (
SELECT * FROM (
SELECT id FROM Sites GROUP BY name HAVING COUNT(name) >= 2
) AS a
);
谢谢
我还没有看到有人就这个具体问题寻求帮助。
我有一个 table,里面有 300,000 行。每行都有一个唯一的 id,几列,但没有时间戳等。
我遇到的问题是用户已设法将新数据导入数据库,因此现在有些行是重复的。
对于有此问题的行,有 2 行除了 ID 外完全相同。
有没有办法搜索整个 table,根据名称找到重复的行并删除具有旧 ID 的行?
我需要确保只删除一个重复项,并且只删除旧条目。
到目前为止,我已经想出了以下显示重复行的内容。
SELECT id, name, COUNT(name) AS cnt
FROM Sites
GROUP BY name
HAVING (cnt > 1)
这会产生 id
、name
、cnt
的输出,并显示有 50,000 个条目要删除。显示的 ID 似乎是旧 ID。
是否可以将其输入删除命令以删除条目?
谢谢
假设旧 ID 的值较低,您可以使用 FIRST_VALUE
按名称分区(不熟悉您的 table)并按 ID 排序。
据我了解,现在 table 中有两行重复,您想删除旧行或 ID 较小的行。
您可以 INNER JOIN
相同 table。
首先,确认要删除的所有行:
SELECT t1.* FROM Sites t1
INNER JOIN Sites t2
WHERE t1.name = t2.name
AND t1.id < t2.id
这应该只有 return 个 ID 较小的原始行
其次,如果所有 returned 行都是正确的,现在您可以使用该查询并获取每个 ID 并在 DELETE
语句
DELETE * FROM Sites WHERE id IN (
SELECT t1.id FROM Sites t1
INNER JOIN Sites t2
WHERE t1.name = t2.name
AND t1.id < t2.id
)
您可以使用 table 中的 AND
添加更多列,以检查完全重复的行。
这似乎对我有用。
DELETE FROM Sites WHERE id IN (
SELECT * FROM (
SELECT id FROM Sites GROUP BY name HAVING COUNT(name) >= 2
) AS a
);
谢谢