Частичное совпадение с Oracle - PullRequest
0 голосов
/ 18 февраля 2019

У меня есть следующие записи

Основная строка

abc,def,ghi,jkl,mno

Записи

abc,ghi,xyz
bbb,jkl
abc,ghi,mno
bbb,ggg

Каждая из этих записей является объединенными полями из другого запроса.(первая запись - это конкатенация "abc", "ghi" и "xyz").

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

Можно ли использовать один запрос для обработки этого?Единственный способ подумать - разбить каждую запись на отдельные компоненты и сопоставить их по отдельности, но я надеюсь на более эффективное решение.Я не могу заставить регулярное выражение работать с этим.

1 Ответ

0 голосов
/ 18 февраля 2019

Вам нужно повторно атомизировать строку master.К счастью, вам не нужно трогать записи record.

В этом решении используется регулярное выражение для разбиения основной строки на токены.Они связаны между собой токенами.Мы используем instr(), чтобы увидеть, существует ли токен в строке записи, и результат агрегируется для получения одной записи с флагом Y / N на record.

with m as ( 
    select regexp_substr(str,'[^,]+', 1, level) as tkn
    from master_t
    connect by level <= regexp_count(str, ',')+1
)
select r.str
       , max(case when instr(r.str, m.tkn) > 0 then 'Y' else 'N' end) as in_str
from m
     cross join record_t r
group by r.str
/

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

...