mysql一行数据拆分为多行数据

最近有个项目中有个问题想在sql中解决,使用的是mysql并不是很熟悉,解决的问题是:

将该条数据按照TXYMZL拆分为两条数据,我上网也查了一下,看到普遍是有两种做法:

第一种:写存储过程来解决这个问题,但是用mysql一般不推荐使用存储过程,因为以后数据库版本升级或者数据迁移比较困难。

第二种:使用mysql自带的一张叫做help_topic的自增序列表,可以解决这个问题。(用该方法的时候,因为数据库的权限问题,我们在SQL中使用mysql.help_topic会报错,所以我们采用自己在数据库新建一张自增序列表,该表的内容两个字段ID,NUM 分别都是从1开始到99或者更大的为止)

下面的SQL采用第二种来处理的上面问题:

select
  aa.txymzl from
  (select
          substring_index(substring_index(a.txymzl,',',b.NUM),',',-1) as  txymzl
   from  (SELECT  q.TXYMZl as  txymzl,t.* from T_xxxx t
                                      left join T_xxvv q on t.YMCP=q.CPBM and q.DQZT='1'
          where t.YXBZ='1' and q.TXYMZL!='' and t.SZZBM='310106010120160002' and  instr(q.TXYMZL,',')>0) a
           join (select  NUM as NUM from T_SPLIT_NUM) b
         on b.NUM <=(length(a.txymzl)-length(REPLACE(a.txymzl,',',''))+1)
    ) aa;

运行上面的SQL效果如下图所示:

mysql一行数据拆分为多行数据_第1张图片

你可能感兴趣的:(数据库,关系型数据库MySQL,mysql,一行转多行)