MYSQL把两个字段组合成对象数组

img

如图的u1和u2 用MYSQL查出来跟下方的格式一样的有办法吗 纯SQL不行的话可以加JS函数

mysql有GROUP_CONCAT

img

select id,name,CONCAT('[',temptb.tag,']') as tag from u1 left join(
SELECT
            u1id,GROUP_CONCAT('{"id":',u2.id,',"tag":"',u2.tag,'"}') as tag
        FROM
            u2 
group by u1id)temptb on temptb.u1id=u1.id

img

以下sql在mysql8.0测试通过,mysql是支持json处理的,使用原生json效率会比字符串拼接要高,而且可以避免字符串中存在json保留符号导致生成的json字符串无法被解析的问题

SELECT
    u1.id,
    u1.NAME,
    JSON_ARRAYAGG(JSON_OBJECT('id',u2.id,'tag',u2.tag)) 
FROM
    u1,
    u2 
WHERE
    u1.id = u2.u1id 
GROUP BY
    u1.id,
    u1.NAME;

img