Mysql 具有相同值但在不同列中的行并将它们显示在一行中

Mysql Rows which have same values but in different column & Show them in a single row

我想做的是合并具有相同值但在不同列中的行并将它们显示在一行中

我尝试使用 JSON_ARRAYAGG() 但没有按照我的方式得到结果

用户数据

这里二级用户是primary_user

的参考
id username secondary_user code
1 max_max null 1356
2 jac_jac 1 1111
3 leo_leo null 2222
4 bob_bob 3 4444

我要的结果

id username secondary_user code secondary_users
1 max_max null 1356 [{"jac_jac", "1111"}]
3 leo_leo null 2222 [{"bob_bob", "4444"}]

首先你需要 table.
的自连接 然后使用 JSON_OBJECT(){"user_name": "user_code"} 而不是 {"user_name", "user_code"} 的形式为用户创建有效的 json 对象,最后聚合并使用 JSON_ARRAYAGG():

SELECT t1.*,
       JSON_ARRAYAGG(JSON_OBJECT(t2.username, t2.code)) secondary_users
FROM tablename t1 LEFT JOIN tablename t2
ON t2.secondary_user = t1.id
WHERE t1.secondary_user IS NULL
GROUP BY t1.id;

我假设id是table的主键。

参见demo