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 ('煤炭开采', '煤炭开采、原煤开采、煤炭采掘、原煤采掘、煤炭、煤矿、动力煤');
二、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的问题?