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。
我想做的是合并具有相同值但在不同列中的行并将它们显示在一行中
我尝试使用 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。