如何使用 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.
我有一个 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.