SQL: как выбрать записи, которые подаются содержимое не является подстрокой других - PullRequest
0 голосов
/ 07 декабря 2018

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

В серверной части веб-приложения я хочу автоматически создавать некоторые ссылки (заголовки другого содержимого), такие как Википедия, в виде длинного текста.Я не хочу выбирать строки, когда одна строка является подстрокой других: моя таблица выглядит примерно так, и я хочу выбрать

id | title_to_wiki_link   | 
---------------------------------------------
1  | title xxxx xxx zzzz  | 1=>yes (is unique)
2  | text xxxx            | 1=>yes (is unique)
3  | title yyyyy          | 1=>yes (is unique)
4  | title                | 0=>no (is part of 3,1)
5  | yyy                  | 0=>no (is part of 3)
6  | zzz                  | 0=>no (is part of 1)

Ответы [ 2 ]

0 голосов
/ 07 декабря 2018

Вы можете сделать это, LEFT JOIN подготавливая таблицу к себе, ища записи, которые не являются подстроками другого заголовка:

SELECT l1.*
FROM links l1
LEFT JOIN links l2 ON l2.id != l1.id AND l2.title_to_wiki_link LIKE CONCAT('%', l1.title_to_wiki_link, '%')
WHERE l2.id IS NULL

Вывод:

id  title_to_wiki_link
1   title xxxx xxx zzzz
2   text xxxx
3   title yyyyy

Демо на dbfiddle

0 голосов
/ 07 декабря 2018

Вы можете использовать exists:

select t.*
from t
where not exists (select 1
                  from t t2
                  where t2.title_to_wiki_link not like concat('%', t.title_to_wiki_link, '%')
                 );

Обратите внимание, что это будет иметь довольно низкую производительность, поэтому, если у вас большой стол, это может оказаться невозможным.К сожалению, MySQL не имеет хорошего решения для больших таблиц.

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