是否可以对 JSON 数组进行“IN”查询?

Is is possible to do `IN` query over JSON array?

在 SQL 服务器中,有没有办法对 json 数组进行 IN 查询?

例如

有一列 foo 包含一个 json 数组

第 1 行 -> {"foo":["a", "b"]}

第 2 行 -> {"foo":["c", "a", "b"]}

我需要查询 json 数组

中具有 b 的行

JSON_QUERY可以return数组,但是没办法

类似

SELECT *   
FROM table1 
WHERE "b" in JSON_QUERY(foo)

LIKE 查询可以,但效率低下

您可以将 OPENJSONJSON_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'

示例输入:

示例输出: