MySQL中实现一行转多行(类似Hive的explode(split))

 一、当前表结构

建表语句

CREATE TABLE `xfhf_label` (
  `xfhf` varchar(255) DEFAULT NULL,
  `keyWord` varchar(255) DEFAULT NULL
) ENGINE=InnoDB DEFAULT CHARSET=utf8;
INSERT INTO xfhf_label VALUES ('化学合成纤维', '合成纤维、化纤织造、化纤');
INSERT INTO xfhf_label VALUES ('玻璃纤维', '玻璃纤维、玻纤');
INSERT INTO xfhf_label VALUES ('煤炭开采', '煤炭开采、原煤开采、煤炭采掘、原煤采掘、煤炭、煤矿、动力煤');
View Code

 二、SQL语句及结果

SELECT  DISTINCT xfhf,
 substring_index(substring_index(t1.keyWord, '', topic.help_topic_id + 1 ), '',- 1 ) AS keyWord
FROM xfhf_label t1
 JOIN mysql.help_topic topic ON topic.help_topic_id < ( length(t1.keyWord ) - length( REPLACE 
 (t1.keyWord, '', '' ) ) + 1 );

 

 注:

这条sql语句其实跟help_topic表没有什么关系,仅仅是借用了help_topic表的help_topic_id的值为(0,1,2,...),因此在本数据库中建立一个仅含ID字段的表进行关联,同样可以实现转多行效果。
如果数据过多则不能用help_topic表来构建这样的列表,因为在mysql5.5中这个值最大是512

 如果超过512可以自己建立一个仅含ID字段的表进行关联,注意从0开始。

 

参考:1.怎么解决MYSQL 的b.help_topic_id为null的问题?

   2.浅析mysql一行转多行

 

posted @ 2022-04-26 19:38  奇遇yms  阅读(2513)  评论(0编辑  收藏  举报