当前位置: 首页 > news >正文

mysql JSON_ARRAYAGG联合JSON_OBJECT使用

父表数据(表名:class)

idname
1一年级
2二年级
3三年级

子表数据(表名:students)

idnameclassId
11张三1
12李四1
13小明3

sql查询(推荐使用方法一)

方法一 (使用IFNull判断子表数据是否为空,为空的话使用JSON_ARRAY显示空数组):

SELECT   
    u.id,  
    u.name,  
    IFNULL(  
        (
           SELECT JSON_ARRAYAGG(  
             JSON_OBJECT('id', o.id, 'name', o.name)  
           )  
           FROM students o   
           WHERE o.classId = u.id
        ),  
        JSON_ARRAY()  
    ) AS students
FROM   
    class u;  

方法二

SELECT   
    u.id,   
    u.name,   
  IF(  
        COUNT(o.id) = 0, 
        JSON_ARRAY(),  
        JSON_ARRAYAGG(  
            JSON_OBJECT(  
                'id', o.id,   
                'name', o.name  
            )  
        )  
    ) AS students
FROM   
    class u   
LEFT JOIN   
    students o ON u.id = o.classId
    GROUP BY   
    u.id;

查出来的数据

idnamestudents
1一年级[{"id": 11, "name": "张三"}, {"id": 12, "name": "李四"}]
2二年级[]
3三年级[{"id": 13, "name": "小明"}]

相关文章:

  • 第二章:NumPy进阶与数据处理
  • 机器学习基础概括
  • windows通用网线连接ubuntu实现ssh登录、桌面控制、文件共享【实操常见问题解决思路】
  • 本地Ollama+Spring AI alibaba智能客服(飞机票预定示例Demo)Mac版
  • Redis7——进阶篇(七)
  • datetime模块
  • ECharts 中轴的分类及常见使用场景
  • 【FreeRtos】随手记录想法和DeepSeek的交流
  • anaconda学习
  • vue 路由
  • 把doi直接插入word中,然后直接生成参考文献
  • 论文阅读:Dual Anchor Graph Fuzzy Clustering for Multiview Data
  • compareTo方法示例
  • git分支和标签
  • ①EtherCAT/Ethernet/IP/Profinet/ModbusTCP协议互转工业串口网关
  • K8s存储全解析:从临时存储到持久化解决方案的完整指南
  • 探索量子世界的先驱:马克斯・普朗克与普朗克参数
  • 【区块链安全 | 第十七篇】类型之引用类型(一)
  • 数据结构:树的5种存储方案详解(C语言完整实现)
  • 计算机网络 TCP/IP参考模型
  • 套用别人产品图片做网站/企业网站seo多少钱
  • 怎么做传奇私服网站/网站建设是什么工作
  • 做筹款的网站需要什么资质/天津百度关键词推广公司
  • 那些平台可以给网站做外链/seo网站关键词优化工具
  • 政府网站专题栏目建设/网络营销知识
  • 速升网站/seo下载站