Oracle转换MySql之递归startwith详解,
目录
- Oracle转换MySql之递归start with
- Oracle转换Mysql之start with
- Oracle中start with…
- 转换为MySql为
- 下面提供了这个函数
- 总结
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 ;
总结
以上为个人经验,希望能给大家一个参考,也希望大家多多支持PHP之友。
您可能感兴趣的文章:- Oracle START WITH 递归语句的使用方法
- Oracle递归查询start with connect by prior的用法
- Mysql实现Oracle中的Start with...Connect by方式
- mysql实现connect by start with方式
本站文章为和通数据库网友分享或者投稿,欢迎任何形式的转载,但请务必注明出处.
同时文章内容如有侵犯了您的权益,请联系QQ:970679559,我们会在尽快处理。