Не симпатичный метод, но, возможно, отправная точка ...
Предполагается, что таблица со столбцом уникального идентификатора id
и столбцом array<string>
col
и строковой переменной с ','
в качестве разделителя (и ни одного случая сбежавшего '\,'
) ...
SELECT
yourTable.id
FROM
yourTable,
yourTable.col
GROUP BY
yourTable.id
HAVING
COUNT(DISTINCT CASE WHEN find_in_set(col.item, ${VAR:yourString}) > 0 THEN col.item END)
=
LENGTH(regexp_replace(${VAR:yourString},'[^,]',''))+1
В основном ...
- Разверните массивы в своемтаблица, до одной строки на элемент массива.
- Проверьте, существует ли каждый элемент в вашей строке.
- Объедините резервные копии, чтобы подсчитать, сколько элементов было найдено в строке.
- Убедитесь, что количество найденных элементов совпадает с количеством элементов в строке
. COUNT(DISTINCT <CASE>)
справляется с массивами типа {'a', 'a', 'b', 'b'}
.
Без расширениястрока в массив или таблицу (что я не знаю, как это сделать) вы зависите от уникальности элементов в строке. (потому что я просто подсчитываю запятые в строке, чтобы узнать, сколько там элементов ...)