SQL Server 2016 выбрать, где в массиве JSON

У меня есть таблица [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')

3 ответа

Решение

Вам нужно использовать 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');

для вложенного значения посмотрите эту ссылку: JSON_VALUE (Transact-SQL)

Другие вопросы по тегам