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

MySQL如何将JOIN关联结果转为JSON对象或数组而非扁平行列

MySQL 5.7及以上版本内置了JSON相关函数,完全支持你需要的查询需求,无需额外业务层处理即可直接返回符合要求的JSON格式结果。

问题1:1:n关联返回地址数组

可以搭配JSON_OBJECT(将单行地址转为JSON对象)和JSON_ARRAYAGG(将多行JSON对象聚合为数组)实现,对应查询语句如下:

SELECT 
  p.id,
  p.name,
  p.departmentId,
  JSON_ARRAYAGG(
    JSON_OBJECT(
      'id', a.id,
      'personId', a.personId,
      'fullAddress', a.fullAddress
    )
  ) AS addresses
FROM people p
LEFT JOIN addresses a ON p.id = a.personId
WHERE p.id = 2
GROUP BY p.id, p.name, p.departmentId;

查询结果仅返回1条人员记录,addresses字段为所有关联地址组成的JSON数组,如果人员无关联地址则返回空数组。

问题2:1:1关联返回部门JSON对象

直接用JSON_OBJECT函数将部门字段封装为JSON对象即可,对应查询语句如下:

SELECT 
  p.id,
  p.name,
  p.departmentId,
  JSON_OBJECT(
    'id', d.id,
    'name', d.name
  ) AS departmentIdRecord
FROM people p
LEFT JOIN departments d ON p.departmentId = d.id
WHERE p.id = 2;

返回结果的departmentIdRecord字段即为你要求的部门完整JSON对象,无扁平追加的部门字段。

如果需要同时返回部门对象和地址数组,将两个函数合并到同一条SELECT语句中即可,MySQL 8.0还提供了JSON_OBJECT_AGG等更丰富的JSON函数可满足更复杂的嵌套查询需求。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.09.27 01:54:04