Можно ли выполнить запрос IN над массивом JSON?
В SQL Server есть ли способ сделать IN
запрос по массиву JSON?
например.
Там есть колонка foo
который содержит массив JSON
row1 -> {"foo":["a", "b"]}
row2 -> {"foo":["c", "a", "b"]}
Мне нужно запросить строки, которые имеют b
в массиве JSON
JSON_QUERY
может вернуть массив, но нет способа сделать
Что-то вроде
SELECT *
FROM table1
WHERE "b" in JSON_QUERY(foo)
LIKE
запрос будет работать, но неэффективен
1 ответ
Решение
Вы можете объединить OPENJSON
с JSON_QUERY
и использовать CROSS APPLY
разбить результат до уровня элементов массива
declare @tmp table (foo nvarchar(max))
insert into @tmp values
('{"foo":["a", "b"]}')
,('{"foo":["c", "a", "b"]}')
,('{"foo":["c", "a", "y"]}')
SELECT foo
FROM @tmp AS c
CROSS APPLY OPENJSON(JSON_QUERY(foo, '$.foo')) AS x
where x.[value]='b'
Пример ввода:
Образец вывода: