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 ;
总结
以上为个人经验,希望能给大家一个参考,也希望大家多多支持脚本之家。
来源链接:https://www.jb51.net/database/332827qvb.htm
© 版权声明
本站所有资源来自于网络,仅供学习与参考,请勿用于商业用途,否则产生的一切后果将由您(转载者)自己承担!
如有侵犯您的版权,请及时联系3500663466#qq.com(#换@),我们将第一时间删除本站数据。
如有侵犯您的版权,请及时联系3500663466#qq.com(#换@),我们将第一时间删除本站数据。
THE END
暂无评论内容