欢迎投稿

今日深度:

Oracle转换MySql之递归startwith详解,

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方式

    www.htsjk.Com true http://www.htsjk.com/oracle/48588.html NewsArticle Oracle转换MySql之递归startwith详解, 目录 Oracle转换MySql之递归start with Oracle转换Mysql之start with Oracle中start with 转换为MySql为 下面提供了这个函数 总结 Oracle转换MySql之递归start with Oracle转换...
    评论暂时关闭