oracle转换mysql之递归start with
oracle转换mysql之start with
oracle转mysql其实很多细节,这边就不一 一 描述了,这边先整理些“坎”吧!
oracle中start with…
select * from grade_group gg start with gg.group_code=#{groupcode} connect by gg.parent_id= prior gg.id order by gg.group_level
转换为mysql为
select * from grade_group where find_in_set(id, getgradegroupchild(#{groupcode})) order by group_level
这里并非只要简单改下sql就行
可以看出需要一个函数支撑"getgradegroupchild"
下面提供了这个函数
drop function if exists `getgradegroupchild`; delimiter $$ create function `getgradegroupchild`(groupcode varchar(100)) returns varchar(10000) charset utf8 begin declare schildlist varchar(10000); declare schildtemp varchar(1000); --这里我第一次是要将传进来的groupcode 转换成id,然后去递归查询 select id into schildtemp from grade_group where group_code = groupcode; while schildtemp is not null do if (schildlist is not null) then set schildlist = concat(schildtemp,',',schildlist); else set schildlist = concat(schildtemp); end if; select group_concat(id) into schildtemp from grade_group where find_in_set(parent_id, schildtemp)>0; end while; return schildlist; end$$ delimiter ;
总结
以上为个人经验,希望能给大家一个参考,也希望大家多多支持代码网。
发表评论