因爲不少業務表由於歷史緣由或者性能緣由,都使用了違反第一範式的設計模式。即同一個列中存儲了多個屬性值(具體結構見下表)。mysql
這種模式下,應用經常須要將這個列依據分隔符進行分割,並獲得列轉行的結果。sql
表數據:設計模式
ID Value性能
1 tiny,small,big設計
2 small,mediumcode
3 tiny,bigstring
指望獲得結果:class
ID Valueselect
1 tiny數據
1 small
1 big
2 small
2 medium
3 tiny
3 big
select a.ID,substring_index(substring_index(a.mSize,',',b.help_topic_id+1),',',-1) from tbl_name a join mysql.help_topic b on b.help_topic_id < (length(a.mSize) - length(replace(a.mSize,',',''))+1) order by a.ID;