Arrays 如何按属性id合并两个json数组(SQL Server)
我有两列json,我想在id上加入到一个select中 样本数据Arrays 如何按属性id合并两个json数组(SQL Server),arrays,json,sql-server,join,Arrays,Json,Sql Server,Join,我有两列json,我想在id上加入到一个select中 样本数据 | a | b | +------------------------------------------------+-------------------------------------+ | [{id: 1, name: "Alice"},{id
| a | b |
+------------------------------------------------+-------------------------------------+
| [{id: 1, name: "Alice"},{id:2, name: "Bob"}] | [{id: 1, age: 30}, {id:2, age: 32}] |
| [{id: 5, name: "Charlie"},{id:6, name: "Dale"} | [{id: 5, age: 20}, {id:6, age: 14}] |
所需输出
| c |
+-------------------------------------------------------------------+
| [{id: 1, name: "Alice", age: 30},{id:2, name: "Bob", age: 32}] |
| [{id: 5, name: "Charlie", age: 20},{id:6, name: "Dale", age: 14}] |
我想做点像
select
id,
name,
age
from openJson(select a from someDb) sd
with (
id int '$.id',
age int '$.age'
)
inner join (
select
id,
age
from openJson(select b from someDb)
with (
id int '$.id',
age int '$.name'
)
) x
on x.id = sd.id
我认为SQL Server的当前版本不支持
MERGE
功能。唯一的选项是JSON\u MODIFY()
函数,它可以更新现有属性的值、插入新的key:value
对或删除键
但在您的情况下,更合适的方法是使用带有显式模式的OPENJSON()
将存储的JSON解析为表,连接表并重新生成所需的JSON输出:
SELECT
c = (
SELECT a.id, a.name, b.age
FROM OPENJSON(v.a) WITH (
id int '$.id',
name varchar(50) '$.name'
) a
FULL JOIN OPENJSON(v.b) WITH (
id int '$.id',
age int '$.age'
) b ON a.id = b.id
FOR JSON PATH
)
FROM (VALUES
('[{"id": 1, "name": "Alice"}, {"id":2, "name": "Bob"}]', '[{"id": 1, "age": 30}, {"id":2, "age": 32}]'),
('[{"id": 5, "name": "Charlie"}, {"id":6, "name": "Dale"}]', '[{"id": 5, "age": 20}, {"id":6, "age": 14}]')
) v (a, b)
结果:
c
--------------------------------------------------------------------
[{"id":1,"name":"Alice","age":30},{"id":2,"name":"Bob","age":32}]
[{"id":5,"name":"Charlie","age":20},{"id":6,"name":"Dale","age":14}]