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 ;总结
以上为个人经验,希望能给大家一个参考,也希望大家多多支持代码网。
发表评论