• 设为首页
  • 收藏本站
  • 积分充值
  • VIP赞助
  • 手机版
  • 微博
  • 微信
    微信公众号 添加方式:
    1:搜索微信号(888888
    2:扫描左侧二维码
  • 快捷导航
    福建二哥 门户 查看主题

    Oracle转换MySql之递归start with详解

    发布者: 网神之王 | 发布时间: 2025-6-18 09:31| 查看数: 47| 评论数: 0|帖子模式

    Oracle转换MySql之递归start with


    Oracle转换Mysql之start with

    oracle转mysql其实很多细节,这边就不一 一 描述了,这边先整理些“坎”吧!

    Oracle中start with…
    1.   select * from
    2.           grade_group gg
    3.   start with gg.group_code=#{groupCode}
    4.   connect by  gg.parent_id= prior gg.id
    5.   order by gg.group_level
    复制代码
    转换为MySql为
    1.   SELECT
    2.       *
    3.   FROM
    4.       grade_group
    5.   WHERE FIND_IN_SET(ID, getGradeGroupChild(#{groupCode}))
    6.   ORDER BY group_level
    复制代码
    这里并非只要简单改下sql就行
    可以看出需要一个函数支撑"getGradeGroupChild"

    下面提供了这个函数
    1. DROP FUNCTION IF EXISTS `getGradeGroupChild`;
    2. DELIMITER $$
    3. CREATE FUNCTION `getGradeGroupChild`(GROUPCODE VARCHAR(100)) RETURNS VARCHAR(10000) CHARSET utf8
    4. BEGIN
    5.    DECLARE sChildList VARCHAR(10000);
    6.    DECLARE sChildTemp VARCHAR(1000);
    7.    --这里我第一次是要将传进来的GROUPCODE 转换成id,然后去递归查询
    8.    SELECT id INTO sChildTemp FROM grade_group WHERE GROUP_CODE = GROUPCODE;
    9.    WHILE sChildTemp IS NOT NULL DO
    10.          IF (sChildList IS NOT NULL) THEN
    11.                 SET sChildList = CONCAT(sChildTemp,',',sChildList);
    12.          ELSE
    13.                 SET sChildList = CONCAT(sChildTemp);
    14.          END IF;
    15.      SELECT GROUP_CONCAT(id) INTO sChildTemp FROM grade_group
    16.      WHERE FIND_IN_SET(PARENT_ID, sChildTemp)>0;
    17.    END WHILE;
    18.    RETURN sChildList;
    19. END$$
    20. DELIMITER ;
    复制代码
    总结

    以上为个人经验,希望能给大家一个参考,也希望大家多多支持脚本之家。

    来源:https://www.jb51.net/database/332827qvb.htm
    免责声明:如果侵犯了您的权益,请联系站长,我们会及时删除侵权内容,谢谢合作!

    最新评论

    QQ Archiver 手机版 小黑屋 福建二哥 ( 闽ICP备2022004717号|闽公网安备35052402000345号 )

    Powered by Discuz! X3.5 © 2001-2023

    快速回复 返回顶部 返回列表