我有高度相似但不准确的重复条目。这里有些例子:
- 2016: Obama's America
- 2016: Obama's America (VF)
- Hurt Locker
- The Hurt Locker
什么是我可以用来获得可能相似的查询titles
?
更新
请注意,我并不是要删除 EXACT 重复项。我只是想在单个列中选择相似的值。
我有高度相似但不准确的重复条目。这里有些例子:
- 2016: Obama's America
- 2016: Obama's America (VF)
- Hurt Locker
- The Hurt Locker
什么是我可以用来获得可能相似的查询titles
?
请注意,我并不是要删除 EXACT 重复项。我只是想在单个列中选择相似的值。
不确定这是最好的方法还是最有效的方法,这绝对取决于相似的含义。如果意思是标题包含一行中的所有文本但另一行中包含一些文本,那么这样的事情应该有效:
SELECT DISTINCT T.Title
FROM YourTable T
LEFT JOIN YourTable T2 ON T.Title != T2.Title
WHERE T.Title LIKE CONCAT('%', T2.Title, '%')
UNION
SELECT DISTINCT T2.Title
FROM YourTable T
LEFT JOIN YourTable T2 ON T.Title != T2.Title
WHERE T.Title LIKE CONCAT('%', T2.Title, '%')
ORDER BY Title
这是SQL Fiddle。
我认为这可以通过使用一些字符串度量来测量字符串之间的距离来解决。
Levenshtein 似乎是最著名的指标,我在 Oracle 中使用了它的一些实现。它也为 MySQL 实现。您可能会发现其他一些更适合您的指标。