原數(shù)據(jù)
a 1
a 2
b 5
c 6
b 2
預(yù)想效果圖
a 1,2
b 5欠肾,2
c 6
聚合函數(shù)瓶颠,在group語句中使用,可以將多行的字符串按分組整合成一個字符串
語法:
GROUP_CONCAT([DISTINCT] expr [,expr ...][ORDER BY {unsigned_integer | col_name | expr}[ASC | DESC] [,col_name ...]][SEPARATOR str_val])
假定:有一張表是UserRole存儲User對應(yīng)Role關(guān)系董济,其有兩列userId,RoleCode步清,我們可以通過GROUP_CONCAT來取出用逗號分隔的用戶角色
select userId,GROUP_CONCAT(RoleCode SEPARATOR ',') from UserRole
需要注意,GROUP_CONCAT函數(shù)默認(rèn)的最大可連接字符串的長度是1024,如果連接的字符串長度超過1024的話會被截斷廓啊,不過我們可以通過設(shè)置group_concat_max_len的值來修改GROUP_CONCAT的最大長度欢搜。
例如:
SET SESSION group_concat_max_len= 99999;
select userId,GROUP_CONCAT(RoleCode SEPARATOR ',') from UserRole
實際應(yīng)用
--單表
select tt.id,GROUP_CONCAT(tt.ROLE_NAME SEPARATOR ',') as role_name from sys_uer_role tt GROUP BY tt.id
--基于三表聯(lián)查
select tt.id,GROUP_CONCAT(tt.ROLE_NAME SEPARATOR ',') as role_name from (select u.id,r.ROLE_NAME
from sys_user u
JOIN sys_user_role ur on u.id=ur.user_id
JOIN sys_role r on ur.ROLE_ID=r.ID)tt
GROUP BY tt.id