我们的数据库(MySQL)中有一个表,它包含以下内容: id、标题和描述。
这是一个如雨后春笋般涌现的网站,我们从其他网站获得的大部分数据都有相同的标题和描述,尽管ids是唯一的。我们不希望拾取具有相同标题和描述的数据,因为我们的数据库中已经有类似(相同)的数据。
我们如何才能轻松地删除相同的数据呢?(但请记住,ids是唯一的。)
发布于 2010-03-04 18:57:50
根据数据库的大小,您可以计算记录之间的Levenshtein距离或使用soundex。
发布于 2010-03-04 18:58:38
您不必先插入它们,然后再删除它们,而是在这两个列上创建一个UNIQUE KEY,并在插入数据时生成INSERT IGNORE INTO语句。
如果您已经拥有数据并希望将其移除,则可以使用ALTER IGNORE TABLE ADD UNIQUE INDEX ...
发布于 2010-03-04 19:26:48
您的问题是如何从表中删除重复数据。对吗?
您希望找到与其他行具有相同标题和相同描述的所有行,并从中只保留一行并删除其他行。
假设您的表名称为table1,ID列是数字。
DELETE t
FROM table1 t
JOIN (
SELECT title, description, MIN(ID) AS idNotToDelete
FROM table1
GROUP BY title, description
HAVING COUNT(*) > 1
) t1
ON t.title = t1.title AND t.description = t1.description AND t1.idNotToDelete <> t.id 上面的查询将查找具有多个匹配项的所有行,并标记每个匹配项的最小ID。然后它将删除所有具有相同标题和描述的重复行,但具有最小ID.的行除外。
id标题描述
1个myTitle myDescription
2个myTitle myDescription
3 myTitle2 myDescription2
4个myTitle2 myDescription2
5个myTitle myDescription
将会变成
id标题描述
1个myTitle myDescription
3 myTitle2 myDescription2
https://stackoverflow.com/questions/2378626
复制相似问题