mysql 一对多 右表多条记录合并_MYSQL 单表一对多查询,将多条记录合并成一条记录...

理解:如果没有指定分组的话,则将要合拼的字段全部合成一条,总就一条,就合并作用而已。

一、描述:

在MySQL 5.6环境下,应工作需求:将一个表中多条某个相同字段的其他字段合并(不太会表达,有点绕,直接上图)

8844b980e71df036bde37db55b07ad26.png

想要达到的效果:

02febebb8559e2ada52d2ded03a64b59.png

实现SQL语句:

7911b3ddc30b55f1c6f2df323e6c027e.gif

1 SELECT

2 a.books,

3 GROUP_CONCAT(a.name SEPARATOR '||') AS NAMES,

4 GROUP_CONCAT(a.code SEPARATOR '||') AS codes

5 FROM

6 temp_info a

7 GROUP BY a.books ;

f1a71be3493e2e106bb42688357639be.gif

二、关键词 GROUP_CONCAT():(返回一个字符串结果,该结果由分组中的值连接组合而成。)

语法结构:

1 GROUP_CONCAT(

2 [ DISTINCT ] expr [,

3 expr...] [

4 ORDER BY { unsigned_integer | col_name | formula } [ ASC | DESC ] [,

5 col...] ] [ 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 @@global.group_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';

三、使用实例:

c33d049f77e4c1d729a32cf33f60f3c1.png

8d6cedd9dac39d6b2c1777fc3050543b.gif

1 SELECT

2 a.books,

3 GROUP_CONCAT(DISTINCT a.name SEPARATOR '||') AS NAMES, -- 使用 distinct 去除重复数据、

4 GROUP_CONCAT(a.code ORDER BY a.code DESC SEPARATOR '||') AS codes -- 使用order by 对数据进行排序

5 FROM

6 temp_info a

7 GROUP BY a.books ;

583423094f1d83424460ed5f2f3c6180.gif

55b8cc77c4f719ea6d098897c3b90dda.png

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值