我正在使用一些 native JSON 字段来存储有关 MySQL 5.7.10 数据库中某些应用程序实体的信息。每个“实体”可以有“N”行,并且需要将 JSON 对象汇总并合并在一起,任何冲突的键都应该替换而不是合并。我可以通过代码来做到这一点,但如果我能在 MySQL 中以原生方式高效地做到这一点,那就更好了。
我曾尝试结合使用 GROUP_CONCAT
和 JSON_MERGE,但我遇到了两个问题:
- JSON_MERGE 不会将
GROUP_CONCAT
的结果作为有效参数 - JSON_MERGE 合并冲突的键而不是替换它们。我真正需要的是更多的 JSON_SET,但带有“N”个 JSON 文档,而不是“键、值”符号。
对于当前的 MySQL JSON 实现,这可能吗?
最佳答案
您可以执行以下操作:
SELECT
CAST(CONCAT(
'[',
GROUP_CONCAT(
DISTINCT JSON_OBJECT(
'foo', mytable.foo,
'bar', mytable.bar
)
),
']'
) AS JSON) AS myJsonArr
FROM mytable
GROUP BY mytable.someGroup;
关于MySQL 分组并合并 JSON 值,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/35018710/