MySQL的group_concat函数能将字段的值以特定符号相连。
比如现在有user,role,user_role三张表,简单的多对多关系。现在要查出一个用户所有角色名称,并且角色名称以/相连,展示形式为AAA/BBB/CCC。
使用group_concat函数能达到这一效果,而不需要程序去处理。
先看看用户对应的角色:
select ur.user_id,ur.role_id,r.role_name
from sys_user_role ur
join sys_role r
on r.role_id = ur.role_id
where r.del_flag = '0' order by ur.user_id;
结果如图:

1.png
使用group_concat将用户的角色用/连起来:
select ur.user_id, group_concat(DISTINCT r.role_name separator '/') as roleNames from sys_user_role ur
join sys_role r
on r.role_id=ur.role_id
where r.del_flag='0' group by ur.user_id order by ur.user_id;
效果如下:

2.png
注意理解 distinct,group by在SQL语句中的作用。