首页 技术 正文
技术 2022年11月12日
0 收藏 992 点赞 3,378 浏览 1404 个字

结论

先说结论,可以使用group_concat group by的组合实现多行变一行,将一个字段的多个类型串成一个字段

需求:

如题,一个字段如电影类别,一部电影可以是多个类别,如喜剧、动作片等,其形式可以是这样的1::Toy Story (1995)::Animation|Children's|Comedy 字段分别为id,电影名称,电影类别
现有一表cour_info,存储课程与专业的关系,而课程与专业是一对多关系,即一个KCMC可以对应多个major,现在需要将major字段处理为电影类别类似的形式,该如何处理?mysql如何将一个字段多个类型串成一个字符串?

尝试

第一印象想到的是利用update SQL语句进行major字段的字符串拼接的方法,主要使用concat()方法 方法查看
步骤一:对表cour_info进行复制,得下表
mysql如何将一个字段多个类型串成一个字符串?
使用语句

UPDATE cour3,cour_info
set cour3.major= concat_ws('|',ifNULL(cour3.major,''),cour_info.major)
WHERE cour3.KCMC = cour_info.KCMC and cour3.KCMC = '思想道德修养与法律基础';

这里,查询两张表得kcmc为“思想道德修养与法律基础”的相同记录,利用原表major不断对新表major进行字符串拼接,但是并没有像我预想一样,这个语句仅把第一个major拼接了上去,sql功力太浅~~~
mysql如何将一个字段多个类型串成一个字符串?
原表形如
mysql如何将一个字段多个类型串成一个字符串?
这种做法失败了,不知道咋回事,有知道的小伙伴可以告诉博主~~

再尝试

这一次使用group_concat group by的组合实现
一开始不知道怎么使用group_concat
mysql如何将一个字段多个类型串成一个字符串?

发现这样可以使用

SELECT  cour_info.KCMC,GROUP_CONCAT(cour_info.major separator'|')
FROM cour_info WHERE cour_info.KCMC = '思想道德修养与法律基础'

结果如下
mysql如何将一个字段多个类型串成一个字符串?
但是去除where条件后结果出错,只存在第一条记录
mysql如何将一个字段多个类型串成一个字符串?
大发奇想,难道需要分组查询??
结果验证我的猜想,嘿嘿
mysql如何将一个字段多个类型串成一个字符串?
此时,我意识到group_concat xx group by极有可能是一个常用用法,果然
查看group_concat xx group by用法
这时,查询出的结果有重复,可以使用distinct去重,代码如下

GROUP_CONCAT(distinct cour_info.major separator '|')

mysql如何将一个字段多个类型串成一个字符串?

使用SQL语句更新新表

UPDATE cour3,
(SELECT cour_info.KCMC kc,
substring_index(GROUP_CONCAT(distinct cour_info.major separator'|'), '|',16) ma
FROM cour_info GROUP BY cour_info.KCMC)temp
set cour3.major=temp.ma
WHERE cour3.KCMC = temp.kc

因为类别对应过多,这里取16个作为最大的数量
但是发生了错误ERROR 1260 (HY000): Row 17 was cut by GROUP_CONCAT(),这是因为
group_concat存在长度限制
最终添加SQL语句

SET GLOBAL group_concat_max_len=102400;
SET SESSION group_concat_max_len=102400;

解决问题:
mysql如何将一个字段多个类型串成一个字符串?
好了,本次的分享到这就结束了~~

相关推荐
python开发_常用的python模块及安装方法
adodb:我们领导推荐的数据库连接组件bsddb3:BerkeleyDB的连接组件Cheetah-1.0:我比较喜欢这个版本的cheeta…
日期:2022-11-24 点赞:878 阅读:9,492
Educational Codeforces Round 11 C. Hard Process 二分
C. Hard Process题目连接:http://www.codeforces.com/contest/660/problem/CDes…
日期:2022-11-24 点赞:807 阅读:5,907
下载Ubuntn 17.04 内核源代码
zengkefu@server1:/usr/src$ uname -aLinux server1 4.10.0-19-generic #21…
日期:2022-11-24 点赞:569 阅读:6,740
可用Active Desktop Calendar V7.86 注册码序列号
可用Active Desktop Calendar V7.86 注册码序列号Name: www.greendown.cn Code: &nb…
日期:2022-11-24 点赞:733 阅读:6,495
Android调用系统相机、自定义相机、处理大图片
Android调用系统相机和自定义相机实例本博文主要是介绍了android上使用相机进行拍照并显示的两种方式,并且由于涉及到要把拍到的照片显…
日期:2022-11-24 点赞:512 阅读:8,133
Struts的使用
一、Struts2的获取  Struts的官方网站为:http://struts.apache.org/  下载完Struts2的jar包,…
日期:2022-11-24 点赞:671 阅读:5,297