Хороший запрос mysql для поиска похожих значений в одном столбце
У меня есть повторяющиеся записи, которые очень похожи, но не точны. Вот несколько примеров:
- 2016: Obama America
- 2016: Obama America (VF)
- Hurt Locker
- The Hurt Locker
Каким будет запрос, который я мог бы использовать, чтобы получить потенциально похожий titles
?
Обновление: Обратите внимание, что я не пытаюсь удалить EXACT дубликаты. Я просто пытаюсь выбрать одинаковые значения в одном столбце.
Ответы
Ответ 1
Не уверен, что это лучший способ или самый эффективный, и это определенно зависит от значения подобного. Если смысл в заголовке содержит весь текст в одной строке, но часть текста в другой строке, то что-то вроде этого должно работать:
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.
Ответ 2
Я думаю, что это можно решить, измеряя расстояние между строками с помощью строковой метрики.
Levenshtein, по-видимому, является самой известной метрикой, и я использовал некоторую реализацию этого в Oracle. Это реализовано для MySQL. Вы можете найти другую метрику, которая будет работать лучше для вас.