group_concat
用在 group
分组的时候,链接多行的字段拼接在一块儿。mysql
完整的语法以下:sql
group_concat([DISTINCT] 要链接的字段 [Order BY ASC/DESC 排序字段] [Separator '分隔符'])
mysql> select * from t1; +-------+-------+ | id | name | +-------+-------+ | 10001 | 沙 | | 10001 | 石 | | 10001 | 煤 | | 10002 | 水 | | 10002 | 盐 | | 10002 | 盐 | | 10002 | 盐2 | +-------+-------+
把name字段的值打印在一行,逗号分隔(默认)session
执行SQL:code
SELECT id, GROUP_CONCAT(`name`) FROM `t1` GROUP BY id;
运行结果以下:排序
+-------+------------------------+ | id | GROUP_CONCAT(`name`) | +-------+------------------------+ | 10001 | 沙,石,煤 | | 10002 | 水,盐,盐,盐2 | +-------+------------------------+
执行SQL:io
SELECT id, GROUP_CONCAT(DISTINCT `name`) FROM `t1` GROUP BY id;
运行结果以下:变量
+-------+-------------------------------+ | id | GROUP_CONCAT(DISTINCT `name`) | +-------+-------------------------------+ | 10001 | 沙,煤,石 | | 10002 | 水,盐,盐2 | +-------+-------------------------------+
执行SQL:select
SELECT id, GROUP_CONCAT(`name` ORDER BY `name` DESC) FROM `t1` GROUP BY id;
运行结果以下:语法
+-------+--------------------------------------------+ | id | GROUP_CONCAT(`name` ORDER BY `name` DESC) | +-------+--------------------------------------------+ | 10001 | 石,煤,沙 | | 10002 | 盐2,盐,盐,水 | +-------+--------------------------------------------+
使用group_concat_max_len系统变量,你能够设置容许的最大长度。 程序中进行这项操做的语法以下,其中 val 是一个无符号整数: SET [SESSION | GLOBAL] group_concat_max_len = val; 若已经设置了最大长度, 则结果被截至这个最大长度。 将环境变量group_concat_max_len 增大。默认是1024.我就设置了session级的环境变量将其变为2048(不够用再加大)。解决该问题程序