将多行合并到MySQL中

问题描述 投票:-1回答:2

我有一个看起来或多或少像这样的表:

user  is_su  last_login  roles_for_groups
+------+---+------------+----------------------------+
| rob  | 1 | 2018-02-09 | admin, read                |
+------+---+------------+----------------------------+
| gian | 0 | 2018-06-21 | prod_full_access, readOnly | 
+------+---+------------+----------------------------+
| gian | 0 | 2018-06-21 | prod_full_access, CCT      |  
+------+---+------------+----------------------------+
| rob  | 1 | 2018-02-09 | admin, write               |  
+------+---+------------+----------------------------+

并且我想将具有相同用户的所有行合并为单行,以使得表格看起来像这样:

+------+---+------------+---------------------------------+--+
| rob  | 1 | 2018-02-09 | admin, read, write              |  |
+------+---+------------+---------------------------------+--+
| gian | 0 | 2018-06-21 | prod_full_access, readOnly, CCT |  |
+------+---+------------+---------------------------------+--+

我怎样才能做到这一点?

mysql
2个回答
1
投票

为什么不用你想要的方式查询数据,使用GROUP_CONCATDISTINCT

SELECT
    user,
    is_us,
    last_login,
    GROUP_CONCAT(DISTINCT roles_for_groups) roles_for_groups
FROM yourTable
GROUP BY
    user,
    is_us,
    last_login;

目前尚不清楚is_uslast_login列是否总是在功能上依赖于user。如果没有,那么您应该包含一些显示此行为的示例数据。


0
投票
select a.user,a.is_su,a.last_login,group_concat(distinct a.roles_for_groups separator ',' ) 
 from (select user,is_su,last_login,substring_index(roles_for_groups,',',1) as roles_for_groups from table union select user,is_su,last_login,substring_index(roles_for_groups,',',-1)  as roles_for_groups from table) a group by a.user

此查询仅适用于包含两个值的roles_for_groups

© www.soinside.com 2019 - 2024. All rights reserved.