выберите, если слово начинается с другой таблицы, но не существует - PullRequest
0 голосов
/ 28 января 2019

Мне нужно получить из phrase_table всех строк, где столбец phrase содержит слова, начинающиеся с be (в этом примере), но исключить, если все слово существует в stop_words_table, и НЕ ИСКЛЮЧАТЬ, если одно слово существует в stop_words_table, но другого не существует (см. Id = 4 be и because)

phrase_table
id  phrase
1     would be fine
2     nothing to do
3     belgium is beautiful
4     this also must be included because I need

.

stopwords_table
id    word
1       be

.

Я пробовал это:

SELECT id FROM phrase_table
WHERE phrase REGEXP '[[:<:]]be' = 1
-- That return id 1,3,4

SELECT id FROM phrase_table
WHERE phrase REGEXP '[[:<:]]be' = 1
AND phrase NOT IN(
    SELECT * FROM stopwords_table WHERE word = 'be'
)
-- That return nothing because 'be' exists in stopwords_table

ОЖИДАЕМЫЙ РЕЗУЛЬТАТ :

id 3 and 4 from phrase_table

1 Ответ

0 голосов
/ 28 января 2019

Хммм.Если пробелами являются разделители между словами, то я думаю:

select *
from phrase_table pt
where concat(' ', pt.phrase, ' ') regexp '[^ ]be|be[^ ]';

Вы можете расширить это в join с помощью чего-то вроде:

select sw.word, pt.*
from phrase_table pt join
     stopwords_table sw
     on concat(' ', pt.phrase, ' ') regexp replace('[^ ]@sw|@sw[^ ]', '@sw', sw.word);
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...