Я пытаюсь написать запрос к следующей таблице
create table employees (id int identity(1,1) primary key, content nvarchar(max));
insert into employees (content)
values (
N'{
"name": "John Doe",
"skills": [
{
"language": "SQL",
"years": 3
},
{
"language": "C#",
"years": 4
}
]
}'),
(
N'{
"name": "Alice Smith",
"skills": [
{
"language": "JS",
"years": 5
}
]
}
')
;
Я собираюсь получить следующий результат
+ id + name + language + years +
| 1 | John Doe | SQL | 3 |
| 2 | John Doe | C# | 4 |
| 3 | Alice Smith | JS | 3 |
Вот что я придумал
SELECT * FROM
OPENJSON(JSON_QUERY((SELECT content FROM employees), '$.skills'))
WITH (
Language VARCHAR(50) '$.language',
Years int '$.years'
)
Вы можете проверить это в dbfiddle https://dbfiddle.uk/?rdbms=sqlserver_2019&fiddle=8ed626ed8441ea6ccc62b8feec99c227
Он работает, когда столбец content
содержит одну строку, но не работает, когда есть больше.
Subquery returned more than 1 value. This is not permitted when the subquery
follows =, !=, <, <= , >, >= or when the subquery is used as an expression.
Я понимаю, что это значит, но не могу понять, как добраться до него другим способом.
Я пытался с помощью OPEN JSON и JSON_QUERY