如何使用 sql 将值选择为数组?
Posted
技术标签:
【中文标题】如何使用 sql 将值选择为数组?【英文标题】:How is it possible to select the value as array using sql? 【发布时间】:2019-10-27 21:47:56 【问题描述】:在从表中选择 mysql 中的值时, 例如组 g,其中包含列 g.id、g.name
还有一个名为 group_members 的表
我需要获取包含所有成员的所有组
所以sql会返回结果为
1. group_id : 1, group_name : john, members_ids : [12,14]
2. group_id : 2 group_name : jill, members_ids : [12,13,14,15]
SELECT g.id as group_id,
g.name as group_name,
ug.members_ids
FROM groups g
LEFT JOIN group_members gm on gm.user_id = [Userid]
组表
id | name
-----------
1 | group 1
2 | group 2
group_members 表
id | group_id | user_id
1 | 1 | 12
2 | 1 | 14
3 | 2 | 12
4 | 2 | 13
4 | 2 | 13
【问题讨论】:
示例表数据和预期的结果会很棒! mysql 5.7 group_concat 可以工作,但 JSON 函数不行,我猜 【参考方案1】:如果我理解正确你可以尝试使用GROUP_CONCAT
函数
SELECT
g.id as group_id,
g.name as group_name,
GROUP_CONCAT(gm.user_id SEPARATOR ',') members_ids
FROM groups g
LEFT JOIN group_members gm on g.id = gm.group_id
GROUP BY
g.id,
g.name
或者显示为JSON数组你可以尝试使用JSON_ARRAYAGG
函数
SELECT
g.id as group_id,
g.name as group_name,
JSON_ARRAYAGG(gm.user_id) members_ids
FROM groups g
LEFT JOIN group_members gm on g.id = gm.group_id
GROUP BY
g.id,
g.name
【讨论】:
Topicstarter 请记住,JSON_ARRAYAGG
我相信仅适用于 5.7.20/22 左右的 MySQL 版本
组 concat 只返回一行 SELECT g.id as group_id, g.name as group_name, GROUP_CONCAT(gm.user_id SEPARATOR ',') members_ids FROM groups g LEFT JOIN group_members gm on g.id = gm.group_id GROUP BY g.id, g.name
下面的代码返回所有行,但是如果我选择组 concat 它只返回一行` SELECT g.id as group_id, g.name as group_name FROM groups g LEFT JOIN group_members gm on g.id = gm.group_id GROUP BY g.id, g.name `以上是关于如何使用 sql 将值选择为数组?的主要内容,如果未能解决你的问题,请参考以下文章