如何使用 JSON_TABLE 组合“NESTED PATH”值以获取嵌套的 JSON 数组?

How to combine 'NESTED PATH` values using JSON_TABLE to fetch a nested JSON array?

我有一个 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"?

Desired Output:

keyId                        keyNames   keyDesc
aded5b0107bb5a936604bcb6f    abc1, abc2       test

您可以将 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 table,所以暂时忽略它。我用过 MySQL 8.0.

db<>fiddle