Буду использовать список значений в виде строки с разделителем.
Разобью её на табличные строки:
WITH
val_list# AS
(
SELECT 'a;b;c;d;z' AS lst FROM dual
)
SELECT
REGEXP_SUBSTR(lst, '[^;]+', 1, level) AS val
FROM
val_list#
CONNECT BY level <= REGEXP_COUNT(lst, ';')+1
Дальше просто буду каждое значение из таблицы сопоставлять по вхождению в поле 'groups' таблицы 'data_table'.
Правда пока не понятно что лучше, в плане производительности.
Виртуально плодить строки в таблице 'data_table' разбивая так же на каждое найденное значение в поле 'groups'.
Или к каждой строке подключать таблицу значений.
Оба варианта пока смущают, а третий вариант еще не придумал...
Хотя было бы неплохо брать 1-ое значение, прогонять по таблице, при найденном совпадении неким образом помечать/отбрасывать строки, а уже по 2-му значению прогонять только оставшиеся и т.д.
Но как?
to be continued