2013-02-12 5 views
11

Ich habe doppelte Einträge, die sehr ähnlich sind, aber nicht genau. Hier sind einige Beispiele:Gute MySQL-Abfrage, um ähnliche Werte in einer einzigen Spalte zu finden

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

- Hurt Locker 
- The Hurt Locker 

Was wäre eine Abfrage, die ich möglicherweise ähnlich zu bekommen nutzen könnte titles?

Update: Bitte beachten Sie, dass ich nicht versuche, EXAKT-Duplikate zu entfernen. Ich versuche nur, ähnliche Werte in einer einzigen Spalte auszuwählen.

+3

Gute Frage! Vielleicht etwas mit [soundex] (http://dev.mysql.com/doc/refman/5.0/en/string-functions.html#function_soundex)? –

+0

Definieren Sie "ähnlich" – Tchoupi

+0

@ ArnoldDaniels gute Idee, danke für die Referenz. – David542

Antwort

3

Nicht sicher, das ist der beste Weg oder effizienteste, und es hängt definitiv von der Bedeutung von ähnlich. Wenn die Bedeutung der Titel ist der gesamte Text in einer Zeile enthält aber einige der Text in einer anderen Zeile, dann wie etwas, das sollte funktionieren:

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 

Und hier ist die SQL Fiddle.

+0

Ich glaube nicht, dass das geht. Der Film [America] (http://www.imdb.com/title/tt1670931/) würde alle Filme mit Amerika darin übereinstimmen. –

+0

@ ArnoldDaniels - yeah, wie ich schon sagte, ähnlich ist sehr vage :) Interessante Frage nichtsdestoweniger. Ich würde dich gerne fragen - was sollte Amerika zusammenbringen? Nur Filme wie America One, aber nicht America The Great :) Viel Glück. – sgeddes

+0

@ArnoldDaniels - eine Option wäre, einen maximalen Längenunterschied hinzuzufügen - hier ist eine schnelle Geige: http://sqlfiddle.com/#!2/17173/1 – sgeddes

3

Ich denke, dass dies durch die Messung der Abstand zwischen Strings mit einigen string metric gelöst werden kann.

Levenshtein scheint die bekannteste Metrik zu sein, und ich habe einige Implementierungen davon in Oracle verwendet. Es ist implemented for MySQL auch. Möglicherweise finden Sie eine andere Metrik, die für Sie besser funktioniert.

Verwandte Themen