首页 > 数据库 > mysql教程 > 在 MySQL 中生成嵌套 JSON 对象时如何避免'子查询返回超过 1 行”错误?

在 MySQL 中生成嵌套 JSON 对象时如何避免'子查询返回超过 1 行”错误?

DDD
发布: 2024-11-28 06:31:11
原创
831 人浏览过

How to Avoid

使用 MySQL 本机 JSON 函数生成嵌套 JSON 对象

问题:

寻求利用本机 JSON 函数的 MySQL 用户可能会面临从关系数据库构建嵌套 JSON 对象的挑战。具体来说,尝试从一对多关系创建子对象会触发“子查询返回超过 1 行”错误。

解决方案:

有效生成嵌套使用 MySQL 的 JSON 对象,避免使用在父对象的输入中返回多个结果的子查询至关重要。相反,使用 GROUP_CONCAT 函数连接结果并将它们转换为 JSON 数组。

示例:

基于问题中提供的示例,以下查询将生成所需的 JSON 结构:

SELECT JSON_OBJECT(
  'id', p.id,
  'desc', p.`desc`,
  'child_objects',
  (
    SELECT CAST(CONCAT('[',
                GROUP_CONCAT(JSON_OBJECT('id', id, 'parent_id', parent_id, 'desc', `desc`)),
                ']')
         AS JSON)
    FROM child_table AS c
    WHERE c.parent_id = p.id
  )
)
FROM parent_table AS p;
登录后复制

此查询利用 CONCAT 和 GROUP_CONCAT 进行合并最终结果中所需的子对象。将连接的字符串转换为 JSON 数据类型可确保嵌套结构的正确格式。

结果:

渲染的 JSON 对象将与中指定的格式紧密一致问题:

{
  "id": 1,
  "desc": "parent row 1",
  "child_objects": [
    {
      "id": 1,
      "parent_id": 1,
      "desc": "child row 1"
    },
    {
      "id": 2,
      "parent_id": 1,
      "desc": "child row 2"
    }
  ]
}
登录后复制

附加注意:

  • 该解决方案通过将子查询结果转换为逗号分隔的字符串来解决“子查询返回超过 1 行”错误。
  • 使用 CONCAT 并转换结果到 JSON 确保嵌套结构格式正确。
  • 此方法与 MySQL 版本 5.7.12 兼容,并且上面。

以上是在 MySQL 中生成嵌套 JSON 对象时如何避免'子查询返回超过 1 行”错误?的详细内容。更多信息请关注PHP中文网其他相关文章!

来源:php.cn
本站声明
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系admin@php.cn
热门教程
更多>
最新下载
更多>
网站特效
网站源码
网站素材
前端模板