2013-02-12 52 views
11

我有重复的条目非常相似,但并不完全相同。下面是一些例子:好的mysql查询在单个列中查找类似的值

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

- Hurt Locker 
- The Hurt Locker 

会是什么,我可以用得到可能相似titles查询?

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

+3

好问题!也许与[soundex](http://dev.mysql.com/doc/refman/5.0/en/string-functions.html#function_soundex)有关? – 2013-02-12 21:05:52

+0

定义“相似” – Tchoupi 2013-02-12 21:06:33

+0

@ArnoldDaniels好主意,谢谢参考。 – David542 2013-02-12 21:08:11

回答

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

+0

我不认为这会做。电影[美国](http://www.imdb.com/title/tt1670931/)将匹配美国所有电影。 – 2013-02-12 21:27:54

+0

@ArnoldDaniels - 是的,就像我说的,类似的非常模糊:)然而有趣的问题。我想问你 - 美国人应该怎样配合?只有电影像美国一,但不是美国伟大:)祝你好运。 – sgeddes 2013-02-12 21:29:37

+0

@ArnoldDaniels - 一个选项是添加最大长度差异 - 这里是一个快速的小提琴:http://sqlfiddle.com/#!2/17173/1 – sgeddes 2013-02-12 21:35:15

3

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

Levenshtein似乎是最知名的指标,我在Oracle中使用了它的一些实现。也是implemented for MySQL。您可能会发现一些其他指标可以更好地为您服务。