199. mysql 将多行数据用逗号连接返回一个字符串

本文介绍了一种在SQL中使用GROUP_CONCAT函数对多行数据进行合并显示的方法,特别适用于用户角色信息的聚合查询。通过示例展示了如何从用户角色中间表中获取指定用户的多个角色名称,并以逗号分隔的形式返回。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

1.需求

我们有时候会将多行数据进行合并显示(Java 使用循环处理 有点麻烦  现在直接在sql中处理)

2.效果

29ec78abb62dd0228c29835f0cee26b1736.jpg

3. 表结构 及sql 查询

用户角色中间表

b0fc390d9ca438c1fd6808aa4501de1349b.jpg

角色表

90d3ac45783653ff9148771d05851d90888.jpg

表关系

3f6b415c266049f77c63b59e92d0fe3aabe.jpg

3e076468e97cf7aa1fee8a2c488f24db4c2.jpg

--3. 我们需要 分组查询  使用GROUP_CONCAT 函数

SELECT 
  ur.user_id,
  GROUP_CONCAT(r.role_name SEPARATOR ',') AS roleName 
FROM
  t_user_role ur,
  t_role r 
WHERE ur.user_id = '7513523723d24a36b80406aa7409bcb7' 
  AND ur.role_id = r.role_id 
GROUP BY ur.user_id 
 

ff4f72b0cf90579db53ba6eb97ed763d13d.jpg

 

258e4041d88d64fb49eb38e373e1f1665f9.jpg

4. 附 表sql

用户表:

create table `t_user` (
    `index` int (11),
    `user_id` varchar (150),
    `login_id` varchar (765),
    `user_name` varchar (765),
    `password` varchar (765),
    `role_id` varchar (765),
    `role_name` varchar (765),
    `forbidden` varchar (15),
    `create_user_id` varchar (765),
    `create_user_name` varchar (765),
    `create_time` varchar (765),
    `update_time` varchar (765),
    `update_user_id` varchar (765),
    `update_user_name` varchar (765)
); 
insert into `t_user` (`index`, `user_id`, `login_id`, `user_name`, `password`, `role_id`, `role_name`, `forbidden`, `create_user_id`, `create_user_name`, `create_time`, `update_time`, `update_user_id`, `update_user_name`) values('1','59173a48265e45ca93553693b5c345a6','zxy','张馨雨','123456',NULL,NULL,'0','89772925b97442669e2ad3d667061973','管理员','2018-11-30 09:26:41',NULL,NULL,NULL);
insert into `t_user` (`index`, `user_id`, `login_id`, `user_name`, `password`, `role_id`, `role_name`, `forbidden`, `create_user_id`, `create_user_name`, `create_time`, `update_time`, `update_user_id`, `update_user_name`) values('2','f40a20674020402b95c6254163273b3b','xyt','谢雨婷','123456','58ff2336498c41f181e9a0850e8f1dcb','阿里云A主管','0','89772925b97442669e2ad3d667061973','管理员','2018-11-30 09:27:01',NULL,NULL,NULL);
insert into `t_user` (`index`, `user_id`, `login_id`, `user_name`, `password`, `role_id`, `role_name`, `forbidden`, `create_user_id`, `create_user_name`, `create_time`, `update_time`, `update_user_id`, `update_user_name`) values('3','7513523723d24a36b80406aa7409bcb7','lx','李欣','123456','8ecb034d7c494d87a5fa6f7135259b7f,541787a05bf14d4a9092eef209cb5d2d,17d710ba848d405ba670e71af2a34cb7','总经理,阿里云技术经理,阿里云B主管','0','89772925b97442669e2ad3d667061973','管理员','2018-11-30 09:27:23',NULL,NULL,NULL);
 

用户角色中间表


CREATE TABLE `t_user_role` (
  `index` int(11) NOT NULL AUTO_INCREMENT COMMENT '自增主键',
  `user_id` varchar(255) COLLATE utf8_bin DEFAULT NULL COMMENT '用户id',
  `role_id` varchar(255) COLLATE utf8_bin DEFAULT NULL COMMENT '角色id',
  `desire` varchar(255) COLLATE utf8_bin DEFAULT NULL COMMENT '补充说明',
  `create_user_id` varchar(255) COLLATE utf8_bin DEFAULT NULL COMMENT '创建人的id',
  `create_user_name` varchar(255) COLLATE utf8_bin DEFAULT NULL COMMENT '创建人的name',
  `create_time` varchar(255) COLLATE utf8_bin DEFAULT NULL COMMENT '创建时间',
  PRIMARY KEY (`index`)
) ENGINE=InnoDB AUTO_INCREMENT=35 DEFAULT CHARSET=utf8 COLLATE=utf8_bin;

/*Data for the table `t_user_role` */

insert  into `t_user_role`(`index`,`user_id`,`role_id`,`desire`,`create_user_id`,`create_user_name`,`create_time`) values (29,'7513523723d24a36b80406aa7409bcb7','8ecb034d7c494d87a5fa6f7135259b7f','管理员给李欣授权了总经理角色','89772925b97442669e2ad3d667061973','管理员','2018-11-30 19:14:25'),(30,'7513523723d24a36b80406aa7409bcb7','541787a05bf14d4a9092eef209cb5d2d','管理员给李欣授权了阿里云技术经理角色','89772925b97442669e2ad3d667061973','管理员','2018-11-30 19:14:25'),(31,'7513523723d24a36b80406aa7409bcb7','17d710ba848d405ba670e71af2a34cb7','管理员给李欣授权了阿里云B主管角色','89772925b97442669e2ad3d667061973','管理员','2018-11-30 19:14:25'),(34,'f40a20674020402b95c6254163273b3b','58ff2336498c41f181e9a0850e8f1dcb','管理员给谢雨婷授权了阿里云A主管角色','89772925b97442669e2ad3d667061973','管理员','2018-11-30 19:14:53');
 

角色表

CREATE TABLE `t_role` (
  `index` int(11) NOT NULL AUTO_INCREMENT COMMENT '自增主键',
  `role_id` varchar(255) COLLATE utf8_bin DEFAULT NULL COMMENT '角色id',
  `role_name` varchar(255) COLLATE utf8_bin DEFAULT NULL COMMENT '角色名称',
  `desire` varchar(255) COLLATE utf8_bin DEFAULT NULL COMMENT '补充说明',
  `create_user_id` varchar(255) COLLATE utf8_bin DEFAULT NULL COMMENT '创建人的id',
  `create_user_name` varchar(255) COLLATE utf8_bin DEFAULT NULL COMMENT '创建人的name',
  `create_time` varchar(255) COLLATE utf8_bin DEFAULT NULL COMMENT '创建时间',
  `update_time` varchar(255) COLLATE utf8_bin DEFAULT NULL COMMENT '修改时间',
  `update_user_id` varchar(255) COLLATE utf8_bin DEFAULT NULL COMMENT '最后一次修改人的id',
  `update_user_name` varchar(255) COLLATE utf8_bin DEFAULT NULL COMMENT '最后一次修改人的name',
  PRIMARY KEY (`index`)
) ENGINE=InnoDB AUTO_INCREMENT=8 DEFAULT CHARSET=utf8 COLLATE=utf8_bin;

/*Data for the table `t_role` */

insert  into `t_role`(`index`,`role_id`,`role_name`,`desire`,`create_user_id`,`create_user_name`,`create_time`,`update_time`,`update_user_id`,`update_user_name`) values (1,'76c78349d8c44ebbb731a96bddad68c5','管理员','用有所有权限','89772925b97442669e2ad3d667061973','管理员','2018-11-30 09:28:05',NULL,NULL,NULL),(2,'8ecb034d7c494d87a5fa6f7135259b7f','总经理','公司运行管理人','89772925b97442669e2ad3d667061973','管理员','2018-11-30 09:28:38',NULL,NULL,NULL),(3,'8b23b45918e9400082883f4b5ae958c2','技术总监','公司技术负责人','89772925b97442669e2ad3d667061973','管理员','2018-11-30 09:29:18',NULL,NULL,NULL),(4,'541787a05bf14d4a9092eef209cb5d2d','阿里云技术经理','负责阿里云技术业务','89772925b97442669e2ad3d667061973','管理员','2018-11-30 09:30:25',NULL,NULL,NULL),(5,'58ff2336498c41f181e9a0850e8f1dcb','阿里云A主管','负责ECS技术','89772925b97442669e2ad3d667061973','管理员','2018-11-30 09:31:11',NULL,NULL,NULL),(6,'17d710ba848d405ba670e71af2a34cb7','阿里云B主管','负责阿里云安全组技术业务','89772925b97442669e2ad3d667061973','管理员','2018-11-30 09:32:00',NULL,NULL,NULL);
 

 

转载于:https://my.oschina.net/springMVCAndspring/blog/2965431

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值