mysql JSON_ARRAYAGG联合JSON_OBJECT使用
父表数据(表名:class)
id | name |
1 | 一年级 |
2 | 二年级 |
3 | 三年级 |
子表数据(表名:students)
id | name | classId |
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;
查出来的数据
id | name | students |
1 | 一年级 | [{"id": 11, "name": "张三"}, {"id": 12, "name": "李四"}] |
2 | 二年级 | [] |
3 | 三年级 | [{"id": 13, "name": "小明"}] |