mysql - MySQL 8 Json 文档合并来自多行的数据
问题描述
我在多行中有 JSON 文档
第 1 行
{
"data": {
"level": 1,
"name": "xyz",
"property": "value",
"children": [
{
"level": 2,
"name": "xyz-1"
}
]
}
}
第 2 行
{
"data": {
"children": [
{
"level": 2,
"name": "xyz-2"
},
{
"level": 2,
"name": "xyz-3"
}
]
}
}
第 3 行
{
"data": {
"children": [
{
"level": 2,
"name": "xyz-4"
}
]
}
}
我想以这种方式使用 MySQL 8 JSON_MERGE_PRESERVE 所以我得到了结果
{
"data": {
"level": 1,
"name": "xyz",
"property": "value",
"children": [
{
"level": 2,
"name": "xyz-1"
},
{
"level": 2,
"name": "xyz-2"
},
{
"level": 2,
"name": "xyz-3"
},
{
"level": 2,
"name": "xyz-4"
}
]
}
}
我试过了
SELECT JSON_MERGE_PRESERVE(
'{ "data": { "level": 1, "name": "xyz", "property": "value", "children": [ { "level": 2, "name": "xyz-1" } ] } }',
'{ "data": { "children": [ { "level": 2, "name": "xyz-2" }, { "level": 2, "name": "xyz-3" } ] } }',
'{ "data": { "children": [ { "level": 2, "name": "xyz-4" } ] } }'
) as json;
但我想从表中选择 JSON 数据并将其合并,例如
[不工作]
SELECT JSON_MERGE_PRESERVE(a.data_json) from
(SELECT data_json FROM data_table
WHERE name = 'abc') as a
错误消息是错误代码:1582。调用本机函数“JSON_MERGE_PRESERVE”时的参数计数不正确
解决方案
您可以评估和使用的众多选项之一是 CTE(公用表表达式) - 13.2.13 WITH(公用表表达式):
WITH RECURSIVE `cte` AS (
SELECT
1 AS `row`,
`data_json`
FROM
`data_table`
WHERE
`id` = 1
UNION ALL
SELECT
`cte`.`row` + 1 AS `row`,
JSON_MERGE_PRESERVE(`cte`.`data_json`, `data_table`.`data_json`) AS `data_json`
FROM
`data_table`, `cte`
WHERE
`data_table`.`id` = `cte`.`row` + 1
)
SELECT
JSON_PRETTY(`data_json`)
FROM
`cte`
ORDER BY
`row` DESC
LIMIT 1;
请参阅dbfiddle。
推荐阅读
- python - 从字符串创建正则表达式字符集
- neo4j - 从 csv 文件中获取节点标签名称
- tensorflow - 在 Keras/Tensorflow 中,如何在策略范围内使用循环构建模型
- facebook - 我应该提交内部业务应用程序的 Facebook API 潜在客户检索以供应用程序审查
- c# - 内部列表中按字符串长度列出的实体的顺序列表
- c# - 使用 CsvHelper 读取 CSV 文件
- pandas - 如何对至少有一个共同字段的记录进行分组?
- flutter - 如何在 Flutter 中定位文本
- java - Transformation Hierarchy (Problem with modelling transformation of parent on children), OpenGL, LWJGL 3
- c# - 如何在文档 MONGODB (C#) 中获取参数