Фильтровать идентичные или похожие значения столбцов - PullRequest
0 голосов
/ 29 ноября 2018

У меня есть таблица, подобная следующей:

ID | Title
_____________________
1  | Samurai
2  | Airplane
3  | Samurai (2nd edition)
4  | The Deer Hunter
5  | Samurai
6  | Pan's Labyrinth
7  | Airplane 2010

Мне нужно хранить только те записи, которые имеют одинаковые или похожие записи.Ожидаемый результат для приведенной выше таблицы следующий:

ID | Title
_____________________
1  | Samurai
2  | Airplane
3  | Samurai (2nd edition)
5  | Samurai
7  | Airplane 2010

Может ли это быть достигнуто в одном или хотя бы двух запросах?

Ответы [ 2 ]

0 голосов
/ 29 ноября 2018

Один из подходов состоит в том, чтобы выполнить самостоятельное объединение при условии, что заголовок из первой таблицы является подстрокой заголовка во второй таблице, или наоборот:

SELECT DISTINCT t1.ID, t1.Title
FROM yourTable t1
INNER JOIN yourTable t2
    ON (t1.Title LIKE CONCAT('%', t2.Title, '%') OR
       t2.Title LIKE CONCAT('%', t1.Title, '%')) AND
       t1.ID <> t2.ID
ORDER BY
    t1.ID;

enter image description here

Демо

Здесь необходимо выбрать с помощью DISTINCT, поскольку данная пара совпадающих записей будет дважды отображаться внабор результатов.Примите во внимание, что это работает, потому что, например, Samurai, один заголовок, появляется как часть заголовка Samurai (2nd edition).Аналогичная логика применима и к другим совпадениям.

Редактирование на основе комментария Гордона:

SELECT t1.ID, t1.Title
FROM yourTable t1
WHERE EXISTS (SELECT 1 FROM yourTable t2
              WHERE (t1.Title LIKE CONCAT('%', t2.Title, '%') OR
                     t2.Title LIKE CONCAT('%', t1.Title, '%')) AND
                    t1.ID <> t2.ID)
ORDER BY
    t1.ID;

Демо

0 голосов
/ 29 ноября 2018
SELECT MIN(ID) AS ID, Title
from table
group by Title

Документация GROUP BY https://www.w3schools.com/sql/sql_groupby.asp

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...