2013-02-12 53 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。您可能會發現一些其他指標可以更好地爲您服務。