mysql逗号分隔字段拆成行简述

概述

在实际业务中总有一些字段内容是逗号分隔的,然后后续业务需要扩展时就很难受;

所以一般在这种情况下都是需要建立关联表,将字段内容拆分;

当前使用mysql版本
8.0.32

拆分demo

这里要注意mysql.help_topic表的记录行数,我这边mysql8700条左右;
需要保证mysql.help_topic的行数 >= 逗号个数 + 1(2个逗号3个内容,需要join成3行)

本质就是按照逗号个数将记录扩充,然后截取其中对应的内容

select
ahrc.id,

ahrc.question_type,

#从0开始
mht.help_topic_id,



SUBSTRING_INDEX(
#通过逗号个数截取子串
SUBSTRING_INDEX(ahrc.question_type,',',mht.help_topic_id + 1),

',',

#截取子串最后一个元素
-1
) as split_content


from
#业务表
xxxxx ahrc
join mysql.help_topic mht
# help_topic_id 从0开始,逗号不存在时,逗号个数为0,不满足条件
#这里的help_topic_id在查询结果中即代表逗号个数
# 2个逗号有3个元素,需要join上3条记录
on mht.help_topic_id <= (
CHAR_LENGTH(question_type) - CHAR_LENGTH(REPLACE(question_type,',',''))
)

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

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值