MYSQL单表⼀对多查询,将多条记录合并成⼀条记录
来源:
我之前也⽤过,但是当时并不是很懂,请参考:
理解:如果没有指定分组的话,则将要合拼的字段全部合成⼀条,总就⼀条,就合并作⽤⽽已。
⼀、描述:
  在MySQL 5.6环境下,应⼯作需求:将⼀个表中多条某个相同字段的其他字段合并(不太会表达,有点绕,直接上图)
    想要达到的效果:
    实现SQL语句:
1 SELECT
2  a.books,
3  GROUP_CONCAT(a.name SEPARATOR '||') AS NAMES,
4  GROUP_de SEPARATOR '||') AS codes
5 FROM
6  temp_info a
mysql group by order by7 GROUP BY a.books ;
⼆、关键词 GROUP_CONCAT():(返回⼀个字符串结果,该结果由分组中的值连接组合⽽成。)
  语法结构:
1 GROUP_CONCAT(
2  [ DISTINCT ] expr [,
3  ] [
4  ORDER BY { unsigned_integer | col_name | formula } [ ASC | DESC ] [,
5  ] ] [ SEPARATOR str_val ]
6 )
  要点:
  1、通过使⽤ DISTINCT 可以排除重复值。
  2、如果希望对结果中的值进⾏排序,可以使⽤ ORDER BY ⼦句。
3、SEPARATOR:⼀个字符串值,它被⽤于插⼊到结果值中。缺省为⼀个逗号 (","),可以通过指定 SEPARATOR "" 完全地移除这个分隔符。
4、group_concat_max_len:可以设置⼀个最⼤的长度。
  语法: 1 SET [SESSION | GLOBAL] group_concat_max_len = unsigned_integer;
5、如果最⼤长度被设置,结果值未到达到该长度,则结果值会被增加到这个长度。
6、如果分组的字符过长,可以对系统参数进⾏设置:SET @@up_concat_max_len=40000;
注意:
  group_concat_max_len在MySQL的配置⽂件中是有默认值的!最⼤值为1024,如果要想该函数按需求设置长度,使⽤:
  1 SET GLOBAL group_concat_max_len=-1;
  查看group_concat_max_len最⼤长度:
  1 show variables like 'group_concat_max_len';
三、使⽤实例:
1 SELECT
2  a.books,
3  GROUP_CONCAT(DISTINCT a.name SEPARATOR '||') AS NAMES,  -- 使⽤ distinct 去除重复数据、
4  GROUP_de ORDER de DESC SEPARATOR '||') AS codes  -- 使⽤order by 对数据进⾏排序
5 FROM
6  temp_info a
7 GROUP BY a.books ;