mysql中将通过逗号分隔的字符串形成一个表的处理方案

本文探讨了在MySQL中如何将使用Group_concat函数聚合的数据逆向处理,即将带有逗号分隔的字段重新拆分为多行。通过创建辅助表并运用Substring_Index函数,实现了将单行的逗号分隔值转换为多行数据的目标。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

Mysql group_concat函数的逆处理
在MYSQL中当我们处理一对多的关系的时,有时需要只输入一条数据。我只通常是通过group_concat函数进行处理,这样数据就会形成a,b,c,d这种格式,即多的那个数据中间会有逗号进行分隔。
如表A和表B的结构如下
ID NAME
1 A
2 B
表A结构
ID FK_A DES
1 1 EN
2 1 CN
3 2 AU
4 2 JN
表B结构
则执行语句
Select a.id,group_concat(des)G from a,b on a.id=b.fk_a group by a.id
形成的数据如下:
ID G
1 EN,CN
2 AU,JN
以上就是group_concat的常规用法,但我们这里不是讨论group_concat的用法,而是讨论group_concat的逆处理。
即我们有(gt表)
ID G
1 EN,CN
2 AU,JN
这样的表数据,如何形成(ct表)
ID G
1 EN
1 CN
2 AU
2 JN
这样的数据呢?
假设:我们不知道G列中间有几个逗号,即我们不知道第一行最后会形成几条数据,如果有一个逗号,则会形成2条数据,如果有二个逗号,则会形成3条数据。因此我们需要先建立一个表,用于记录每条数据最后形成几条数据。
创建test数据库,数据库中只有一列。
Create table test(ids int(1))
增加数据(这里的数据根据表中有几个逗号来确认)
Insert test(ids)values(1),(2)
执行查询
SELECT ids,SUBSTRING_INDEX(SUBSTRING_INDEX(g,',',SELECT LENGTH(g)-LENGTH(REPLACE(g,',',''))-ids),',',-1) FROM test,gt 
这个语句中:substring_index函数用于截取字符串,length(g)-length(replace(g,’,’,’’)用于判断有几个逗号

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值