mysql列转行(逗号分隔)

mysql查询含逗号的数据,将逗号拆分为多行展示:

原始数据如下:

ID VALUE
1 yang,zheng,song
2 zhao,qian,sun
3 jiang

现在因为新的需求,需要将这些数据转化为如下形式:

ID VALUE
1 yang
1 zheng
1 song
2 zhao
2 qian
2 sun
3 jiang

假设我们需要处理的表结构为:

NAME TYPE LEN
ID INT 11
NAME VARCHAR 255

使用如下sql语句即可实现需求:

SELECT a.id,
substring_index( substring_index( a.name, ',', b.help_topic_id + 1 ), ',',- 1 ) name
FROM table1 a
JOIN mysql.help_topic b ON b.help_topic_id < ( length( a.name ) - length( REPLACE ( a.name, ',', '' ) ) + 1 ) 
ORDER BY a.id

查询的主要思路为,原表与一个包含连续自增长字段的表进行join,得到字符串分隔后的索引值,其中length( a.name ) - length( REPLACE ( a.name, ',', '' ) ) + 1语句获得字符串逗号分隔之后得到的数据长度,两表关联之后,会得到相应行数的数据。比如,

1 yang,zheng.song

在join之后会得到:

ID NAME HELP_TOPIC_ID
1 yang,zheng,song 0
1 yang,zheng,song 1
1 yang,zheng,song 2

之后对查询中的结果,使用substring_index方法进行截取,然后得到我们自己想要的数据。

备注:我们在join的时候借助了mysql.help_topic表,表中的help_topic_id是从0到582连续自增的数值,如果遇到数据经过逗号分隔之后得到的数组长度大于582,则需要自己建立一个连续自增表来进行join,比如:

create table incre_table (AutoIncreID int);
insert into incre_table values (0);
insert into incre_table values (1);
insert into incre_table values (2);
最后编辑于
©著作权归作者所有,转载或内容合作请联系作者
【社区内容提示】社区部分内容疑似由AI辅助生成,浏览时请结合常识与多方信息审慎甄别。
平台声明:文章内容(如有图片或视频亦包括在内)由作者上传并发布,文章内容仅代表作者本人观点,简书系信息发布平台,仅提供信息存储服务。

友情链接更多精彩内容