Т.к. СУБД не указана, то в целом решение примерно такое
- либо - искомую строку разбиваем на строки (в таблицу) объединяем с исходной таблицей и ищем вхождение каждого параметра (из "разбитой" в таблицу строки) через функцию поиска подстроки, далее группируем и применяем HAVING count(1) >= 2
- либо наоборот - каждую строку параметров исходной таблицы разбиваем получаем таблицу матрицу параметров, далее ищем вхождение параметров в искомой строке, и так же группируем и применяем HAVING count(1) >= 2
надеюсь понятно изложил...
и опять таки , т.к. СУБД не указана, то применительно к MS SQL это будет выглядеть вот так:
1.
WITH f AS (
SELECT 'PARAM1 PARAM3 PARAM7' as findstr
),
fr AS (
SELECT t.value AS param
FROM f
CROSS APPLY STRING_SPLIT(f.findstr, ' ') t
)
SELECT d.id, count(1) AS num_matches
FROM data d
CROSS JOIN fr
WHERE charindex(fr.param, d.parameters) > 0
GROUP BY id
HAVING count(1) >= 2
;
2.
WITH f AS (
SELECT 'PARAM1 PARAM3 PARAM7' as findstr
)
SELECT d.id, count(1) AS num_matches
FROM data d
CROSS APPLY STRING_SPLIT(d.parameters, ' ') ds
JOIN f ON 1=1
WHERE charindex(ds.value, f.findstr) > 0
GROUP BY d.id
HAVING count(1) >= 2
;
см. пример на
dbfiddle
PS: относительно других СУБД все примерно так же + - , синтаксис другой может быть и наличие аналога функции
STRING_SPLIT