You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

如何在MySQL中合并多行的JSON数组值?

合并JSON数组并去重的解决方案

问题背景

现有表格数据如下:

UserIDAccess
1["1"]
2["2", "3"]
3["3"]

需要将所有Access字段的数组合并为一个扁平且去重的数组,预期结果:

["1","2","3"]

使用SELECT JSON_ARRAYAGG(Access) FROM your_table;得到的是嵌套数组,不符合需求:

[["1"],["2","3"],["3"]]

可行解决方案

方案1:用JSON_TABLE解析(MySQL 8.0+推荐)

通过JSON_TABLE把每个Access数组里的元素拆成单独行,再聚合去重:

SELECT JSON_ARRAYAGG(DISTINCT access_item) AS merged_access
FROM your_table,
     JSON_TABLE(Access, '$[*]' COLUMNS (access_item VARCHAR(255) PATH '$')) AS jt;

这个方法直接解析JSON数组,逻辑清晰效率高,是最优选择。

方案2:字符串处理兼容低版本

如果你的MySQL版本低于8.0,不支持JSON_TABLE,可以用字符串拆分的方式实现:

SELECT JSON_ARRAY(
  DISTINCT SUBSTRING_INDEX(SUBSTRING_INDEX(REPLACE(REPLACE(Access, '[', ''), ']', ''), ', ', numbers.n), ', ', -1)
) AS merged_access
FROM your_table
JOIN (
  SELECT 1 n UNION ALL SELECT 2 UNION ALL SELECT 3 -- 这里的数字要覆盖数组最多元素数
) numbers
ON CHAR_LENGTH(Access) - CHAR_LENGTH(REPLACE(Access, ',', '')) >= numbers.n - 1;

注意:需要根据实际数组的最大元素个数调整numbers里的数字数量。

内容的提问来源于stack exchange,提问作者Jordan

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.07.15 11:16:03