因为不少业务表由于历史缘由或者性能缘由,都使用了违反第一范式的设计模式。即同一个列中存储了多个属性值(具体结构见下表)。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;