首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >MySQL 8 Json文档合并多行数据

MySQL 8 Json文档合并多行数据
EN

Stack Overflow用户
提问于 2019-11-26 20:29:23
回答 1查看 187关注 0票数 0

我将多行中的JSON文档设置为

第1行

代码语言:javascript
复制
{ 
    "data": {
            "level": 1,
            "name": "xyz",
            "property": "value",
            "children": [
                {
                    "level": 2,
                    "name": "xyz-1"
                }
            ]
        }
}

第2行

代码语言:javascript
复制
{
    "data": {
            "children": [
                {
                    "level": 2,
                    "name": "xyz-2"
                },
                {
                    "level": 2,
                    "name": "xyz-3"
                }
            ]
        }
}

第3行

代码语言:javascript
复制
{
    "data": {
            "children": [
                {
                    "level": 2,
                    "name": "xyz-4"
                }
            ]
        }
}

我想以这样的方式使用MySQL 8 JSON_MERGE_PRESERVE,以便获得结果

代码语言:javascript
复制
{ 
    "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"
                }
            ]
        }
}

我试过了

代码语言:javascript
复制
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数据并合并它,如下所示

不工作

代码语言:javascript
复制
SELECT JSON_MERGE_PRESERVE(a.data_json) from 
    (SELECT data_json FROM data_table
    WHERE name = 'abc') as a

错误信息是错误代码: 1582。对本机函数'JSON_MERGE_PRESERVE‘的调用中的参数计数不正确

EN

回答 1

Stack Overflow用户

发布于 2019-11-30 19:27:01

可以评估和使用的众多选项之一是CTE (常用表表达式)- 13.2.13 WITH (Common Table Expressions)

代码语言:javascript
复制
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

票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/59051017

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档