MySQL多行合并--GROUP_CONCAT函数的使用

总结 专栏收录该内容
24 篇文章 0 订阅

在表设计中,一个字段可能会对应多条数据,但在有的查询场景下,需要实现将多行数据合并成一行数据,在MySQL中可以使用GROUP_CONCAT函数来实现;GROUP_CONCAT函数会计算哪些行属于同一组,并将属于同一组的列显示出来,要返回哪些列,由函数参数(就是字段名)决定,此外分组必须有个标准,就是根据group by指定的列进行分组

例如:在权限设计中,一个角色ID(rid)会对应多个用户ID(uid),按照一般的SQL语句是这样的

SELECT 
  r.*,
  u.uid 
FROM
  t_p2_role r 
  JOIN t_p2_user_role u 
    ON r.rid = u.rid

查询结果如下图:

如果需要查每个角色下有哪些用户,则SQL可按如下修改:

SELECT 
  r.*,
  GROUP_CONCAT(u.uid SEPARATOR ',') uids 
FROM
  t_p2_role r 
  JOIN t_p2_user_role u 
    ON r.rid = u.rid 
GROUP BY r.rid 

查询结果如下图:

注:

1、GROUP_CONCAT()中的值为你要合并的数据的字段名;SEPARATOR函数是用来分隔这些要合并的数据;单引号中是指定的分隔符

2、GROUP_CONCAT()函数需要与group by语句一起使用,才能得到需要的效果,否则所有的数据都会被合并成一条记录,如下图:

其原因可以这样理解:经过GROUP_CONCAT()处理得到的是属于x组的所有成员(函数里面列参数指定需要显示哪些字段),那x组从哪里来?如果没有group by进行指定,那么GROUP_CONCAT()根本不知道要根据哪个分组进行显示成员

所以实际中假如需要查询的结果是这样:左边显示组名,右边显示该组别下的所有成员信息,用这个函数,可以省去很多事情

  • 0
    点赞
  • 0
    评论
  • 1
    收藏
  • 一键三连
    一键三连
  • 扫一扫,分享海报

©️2021 CSDN 皮肤主题: 数字20 设计师:CSDN官方博客 返回首页
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值