處理數(shù)據(jù)時,遇到了需要將一行數(shù)據(jù)變成多行數(shù)據(jù)的情況
如下圖數(shù)據(jù)
image.png
需要將數(shù)據(jù)處理成
image.png
相當(dāng)于將project_manager_id按逗號分隔,分隔后的結(jié)果變成多行凿渊。
那么在mysql中要怎么處理呢?
在這里我們需要用到mysql函數(shù)SUBSTRING_INDEX和mysql表mysql.help_topic
substring_index介紹
substring_index(str,delim,count)
str:要處理的字符串
delim:分隔符
count:計數(shù)
SELECT SUBSTRING_INDEX('23,25,14,13',',',1)
> 23
SELECT SUBSTRING_INDEX('23,25,14,13',',',2)
>23,25
SELECT SUBSTRING_INDEX('23,25,14,13',',',-1)
>13 #返回最后一個分隔的數(shù)據(jù)
通過如下語句,則可實現(xiàn)一行轉(zhuǎn)多行遣总,最終實現(xiàn)上圖的效果
SELECT project_name, SUBSTRING_INDEX(SUBSTRING_INDEX(a.project_manager_id,',',b.help_topic_id + 1),',',- 1) AS project_manager_id
FROM
(
SELECT project_name,project_manager_id
FROM test_table) a
JOIN mysql.help_topic b ON b.help_topic_id <
(LENGTH(a.project_manager_id) - LENGTH(
REPLACE(a.project_manager_id, ',', '')) + 1);