SQL Server 2016 select json 数组中的位置
SQL Server 2016 select where in json array
我有一个 table [JsonTable],列 [JsonData] 保存 json 字符串,
JsonData 如:
{
"Names": ["John", "Joe", "Sam"]
}
我怎样才能加入这个 table 就像:
SELECT* FROM [TestTable] AS T
INNER JOIN [JsonTable] AS J ON T.[Name] IN JSON_QUERY(J.[JsonData], '$.Names')
您需要使用 OPENJSON
函数来读取 Names
数组。您可以使用此查询。
SELECT * FROM [TestTable] T
INNER JOIN [JsonTable] AS J ON T.[Name] IN (SELECT value FROM OPENJSON(J.[JsonData],'$.Names'))
另一种方法是像这样使用交叉应用运算符:
SELECT *
FROM [JsonTable] AS J
CROSS APPLY OPENJSON(J.[JsonData], '$.Names') jsonValue
INNER JOIN [TestTable] T ON T.[Name] = jsonvalue.value
您可以使用 JSON_VALUE 获取特定字段值,
SELECT *
FROM [TestTable] AS T
INNER JOIN [JsonTable] AS J
ON T.[Name] IN JSON_VALUE(J.[JsonData], '$.Names');
嵌套值看这个 link : JSON_VALUE (Transact-SQL)
我有一个 table [JsonTable],列 [JsonData] 保存 json 字符串,
JsonData 如:
{
"Names": ["John", "Joe", "Sam"]
}
我怎样才能加入这个 table 就像:
SELECT* FROM [TestTable] AS T
INNER JOIN [JsonTable] AS J ON T.[Name] IN JSON_QUERY(J.[JsonData], '$.Names')
您需要使用 OPENJSON
函数来读取 Names
数组。您可以使用此查询。
SELECT * FROM [TestTable] T
INNER JOIN [JsonTable] AS J ON T.[Name] IN (SELECT value FROM OPENJSON(J.[JsonData],'$.Names'))
另一种方法是像这样使用交叉应用运算符:
SELECT *
FROM [JsonTable] AS J
CROSS APPLY OPENJSON(J.[JsonData], '$.Names') jsonValue
INNER JOIN [TestTable] T ON T.[Name] = jsonvalue.value
您可以使用 JSON_VALUE 获取特定字段值,
SELECT *
FROM [TestTable] AS T
INNER JOIN [JsonTable] AS J
ON T.[Name] IN JSON_VALUE(J.[JsonData], '$.Names');
嵌套值看这个 link : JSON_VALUE (Transact-SQL)