7

我有一个表[JsonTable],列[JsonData]保存json字符串,

JsonData 喜欢:

{
   "Names": ["John", "Joe", "Sam"]
}

我怎样才能像这样内部加入这个表:

SELECT* FROM [TestTable] AS T
INNER JOIN [JsonTable] AS J ON T.[Name] IN JSON_QUERY(J.[JsonData], '$.Names')
4

3 回答 3

5

您需要使用OPENJSON函数来读取Names数组。您可以使用此查询。

SELECT * FROM [TestTable] T
INNER JOIN [JsonTable] AS J ON T.[Name] IN (SELECT value FROM OPENJSON(J.[JsonData],'$.Names'))
于 2017-10-18T10:23:58.933 回答
4

另一种方法是像这样使用交叉应用运算符:

SELECT *
FROM [JsonTable] AS J
CROSS APPLY OPENJSON(J.[JsonData], '$.Names') jsonValue
INNER JOIN [TestTable] T ON T.[Name] = jsonvalue.value  
于 2017-10-18T15:15:39.103 回答
-1

您可以使用 JSON_VALUE 来获取特定的字段值,

SELECT * 
FROM [TestTable] AS T 
INNER JOIN [JsonTable] AS J 
ON T.[Name] IN JSON_VALUE(J.[JsonData], '$.Names');

对于嵌套值,请查看此链接:JSON_VALUE (Transact-SQL)

于 2018-03-23T01:01:49.623 回答