Max
Max

Reputation: 4879

SQL Server 2016 select where in json array

I have a table [JsonTable], and the column [JsonData] save the json string,

JsonData like:

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

How can I inner join this table like:

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

Upvotes: 10

Views: 8280

Answers (3)

Serkan Arslan
Serkan Arslan

Reputation: 13393

You need to use OPENJSON function for reading Names array. You can use this query.

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

Upvotes: 7

monikapatelIT
monikapatelIT

Reputation: 1007

You can use JSON_VALUE to get particular field value,

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

for the nested value have look this link : JSON_VALUE (Transact-SQL)

Upvotes: 0

Lydia
Lydia

Reputation: 117

Another way is to use the cross apply operator like this:

SELECT *
FROM [JsonTable] AS J
CROSS APPLY OPENJSON(J.[JsonData], '$.Names') jsonValue
INNER JOIN [TestTable] T ON T.[Name] = jsonvalue.value  

Upvotes: 7

Related Questions