好的mysql查询可以在单个列中查找类似的值

时间:2013-02-12 20:58:13

标签: mysql sql similarity

我有重复的条目非常相似,但不完全相同。以下是一些例子:

- 2016: Obama's America
- 2016: Obama's America (VF)

- Hurt Locker
- The Hurt Locker

我可以使用哪种查询来获得可能相似的titles

更新:请注意,我并不是要删除EXACT重复项。我只想在一列中选择相似的值。

2 个答案:

答案 0 :(得分:3)

不确定这是最好的方式还是最有效的方式,它绝对取决于类似的含义。如果含义是标题包含一行中的所有文本但是包含另一行中的一些文本,则这样的内容应该有效:

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

答案 1 :(得分:3)

我认为这可以通过测量一些string metric的字符串之间的距离来解决。

Levenshtein似乎是最知名的指标,我在Oracle中使用了它的一些实现。它也是implemented for MySQL。您可能会找到一些更适合您的其他指标。