首页 > 解决方案 > 在值列表中查询 json 以获取现有值

问题描述

我的 Azure Sql 数据库中有(简化的)以下 json:

{
    "Basket": "Test",
    "Products": [
        { "Id": 1, "Name": "Apple" },
        { "Id": 2, "Name": "Pear" },
        { "Id": 3, "Name": "Coconut" },
    ]
}

我想查询一个装满上述篮子的表格。

CREATE TABLE [Baskets] (
  [id] [int] NOT NULL,
  [json] [varchar](max) NOT NULL
)

假设我想编写一个查询以仅选择包含椰子的篮子。怎么办?

我可以写一个像下面这样的查询,只有更多的产品可能......

SELECT 
  Id, 
  Json 
FROM 
  Baskets
WHERE 
  JSON_VALUE(json, '$.Products[0].Id' = '3'

标签: jquerysqljson

解决方案


答案(供将来参考)是使用OPENJSON函数。

SELECT 
  Id, 
  Json 
FROM 
  Baskets
WHERE 
  'Coconut' = in (
    select Name from OPENJSON(json, '$.Products') 
    with (Name nvarchar(30) '$.Name')
  )


推荐阅读