【问题标题】:How to combine 'NESTED PATH` values using JSON_TABLE to fetch a nested JSON array?如何使用 JSON_TABLE 组合“NESTED PATH”值以获取嵌套的 JSON 数组?
【发布时间】:2021-10-25 18:42:04
【问题描述】:

我有一个 Json 数组,如下所示

[{"keyId": "aded5b0107bb5a936604bcb6f", "keyNames": ["abc1, abc2"], "keyDesc": "test"}]

我正在使用 JSON_TABLE 获取所有值,并且我编写了以下查询:

SELECT j.keyId, j.keyNames, j.keyDesc
FROM asknow a, JSON_TABLE(value, '$[*]' 
    COLUMNS(
      keyId TEXT PATH '$.keyId',
      NESTED PATH '$.keyNames[*]' COLUMNS (keyNames TEXT PATH '$'),
      keyDesc TEXT PATH '$.keyDesc')
    ) AS j;

我得到以下输出:

keyId                        keyNames   keyDesc
aded5b0107bb5a936604bcb6f    abc1       test
aded5b0107bb5a936604bcb6f    abc2       test

如何修改查询以将值组合成单个字符串"abc1, abc2"

期望的输出:

keyId                        keyNames   keyDesc
aded5b0107bb5a936604bcb6f    abc1, abc2       test

【问题讨论】:

    标签: mysql arrays json sql-update mysql-json


    【解决方案1】:

    您可以将json_table 列与group_concat() 组合起来,对从内部数组中提取的多行进行分组。

    SELECT j.keyId, group_concat(distinct j.keyNames) as keyNames, j.keyDesc
    FROM JSON_TABLE(@temp, '$[*]' 
        COLUMNS(
          keyId TEXT PATH '$.keyId',
          NESTED PATH '$.keyNames[*]' COLUMNS (keyNames TEXT PATH '$'),
          keyDesc TEXT PATH '$.keyDesc')
        ) AS j
    group by j.keyId, j.keyDesc;
    

    我不确定您为什么在查询中使用了asknow a 表,所以暂时忽略它。我用的是 MySQL 8.0。

    db<>fiddle

    【讨论】:

      猜你喜欢
      • 2021-10-25
      • 1970-01-01
      • 1970-01-01
      • 2020-01-24
      • 1970-01-01
      • 1970-01-01
      • 2019-11-20
      • 1970-01-01
      相关资源
      最近更新 更多