zoukankan      html  css  js  c++  java
  • mysql如何将一个字段多个类型串成一个字符串?

    结论

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

    需求:

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

    尝试

    第一印象想到的是利用update SQL语句进行major字段的字符串拼接的方法,主要使用concat()方法 方法查看
    步骤一:对表cour_info进行复制,得下表
    在这里插入图片描述
    使用语句

    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功力太浅~~~
    在这里插入图片描述
    原表形如
    在这里插入图片描述
    这种做法失败了,不知道咋回事,有知道的小伙伴可以告诉博主~~

    再尝试

    这一次使用group_concat group by的组合实现
    一开始不知道怎么使用group_concat
    在这里插入图片描述

    发现这样可以使用

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

    结果如下
    在这里插入图片描述
    但是去除where条件后结果出错,只存在第一条记录
    在这里插入图片描述
    大发奇想,难道需要分组查询??
    结果验证我的猜想,嘿嘿
    在这里插入图片描述
    此时,我意识到group_concat xx group by极有可能是一个常用用法,果然
    查看group_concat xx group by用法
    这时,查询出的结果有重复,可以使用distinct去重,代码如下

    GROUP_CONCAT(distinct cour_info.major separator '|')
    

    在这里插入图片描述

    使用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; 
    

    解决问题:
    在这里插入图片描述
    好了,本次的分享到这就结束了~~

  • 相关阅读:
    微信小程序 获取手机号 获取基础信息 自定义分享 获取dom节点
    微信公众号 生成带参数进入公众号关注页的二维码 监听用户关注公众号事件 自定义菜单栏 (服务端)
    js 防抖和节流 (学习笔记)
    vue 封装axios api模块化 并使用方式 MD5 数据加密
    1.1 Logistics Regression模型
    音视频入门-19-使用giflib处理GIF图片
    思维
    面试题库
    前端代码规范
    D3JS笔记
  • 原文地址:https://www.cnblogs.com/sunqiangstyle/p/10312294.html
Copyright © 2011-2022 走看看