最近有个项目中有个问题想在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效果如下图所示:
版权声明:本文为u012934325原创文章,遵循 CC 4.0 BY-SA 版权协议,转载请附上原文出处链接和本声明。