mysql - 如何使用 JSON_TABLE 组合“NESTED PATH”值以获取嵌套的 JSON 数组?
问题描述
我有一个 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
解决方案
您可以将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。
推荐阅读
- flutter - Flutter SQFLITE 转 Future List 可迭代
- unity3d - 如何使 Unity 3d 随机范围游戏对象销毁?
- python - Django 和 Heroku - 在依赖之前应用迁移
- azure-databricks - 如何在不关心分隔符的情况下读取 CSV 文件并使用 Azure Databricks(Python) 创建数据框?
- r - 从 url 将 csv 下载到 R 中不起作用
- c# - 以正确的方式为 HttpClient 链接 HttpMessageHandler
- c++ - C++ wxWidgets显示并生成二维码
- python - 如何在 Pyautocad 中创建尺寸线?
- node.js - 以下情况的 mongoDb 查询是什么?
- javascript - NODE JS - 通过带有 if/else 语句的 POST 请求循环的问题