需要依赖 mysql.help_topic 表
SELECT
a.id,a.num,SUBSTRING_INDEX( SUBSTRING_INDEX( a.`name`, ',', b.help_topic_id + 1 ), ',',-1 ) name
FROM
test a
JOIN mysql.help_topic b ON b.help_topic_id < ( LENGTH( a.`name`) - LENGTH( REPLACE ( a.`name`, ',', '' ) ) + 1 );
1.REPLACE 函数:
把 字符串 a,b,c,d 里面的逗号替换成空字符串
SELECT REPLACE('a,b,c,d', ',', '');
-- 输出: abcd
2.SUBSTRING_INDEX 函数:
SUBSTRING_INDEX(str, delim, count)
str : 表示需要拆分的字符串
delim : 表示分隔符,通过某字符进行拆分
count : 当 count 为正数,取第 n 个分隔符之前的所有字符;当 count 为负数,取倒数第 n 个分隔符之后的所有字符。
一行变多行原理
SUBSTRING_INDEX(SUBSTRING_INDEX(a.name, ',', b.help_topic_id), ',',-1 ) 就是获取 tmp_help_topic 表的 help_topic_id 字段的值作为 name 字段的第几个子串
使用了 join 就会把字段 name 分为 (LENGTH( a.name) - LENGTH(REPLACE(a.name, ',', '')) + 1 ) 行,并且每行的字段刚好是 name 字段的第 help_topic_id 个子串
评论区