zoukankan      html  css  js  c++  java
  • Oracel递归查询start with ...connect by prior在Mysql中的实现

    Oracle是一个强大的数据库,有很多的函数和语法可以带来很多便利,有些函数和语法在Mysql中有代替的,但是有些没有现成可用的方法,比如Oracle的递归,在Mysql中怎么实现呢?

    例子:

    Oralce递归:

    SELECT
      s.sysfuncid
    FROM T_SM_SYSFUNC s
    WHERE s.sysfuncid != t.sysfuncid 
    START WITH s.sysfuncid = t.sysfuncid connect 
    BY prior s.sysfunccode = s.psysfuncid

    Mysql实现递归:

    先写个Mysql函数:

    DROP FUNCTION IF EXISTS FOO3;
    CREATE FUNCTION `FOO3` (userid VARCHAR(255))
    RETURNS VARCHAR(4000)
    BEGIN
    DECLARE sTemp VARCHAR(4000);
    DECLARE sTempChd VARCHAR(4000);
    SET sTemp = '$';
    SET sTempChd = userid;
    WHILE sTempChd IS NOT NULL DO
    SET sTemp = CONCAT(sTemp,',',sTempChd);
    SELECT GROUP_CONCAT(sysfunccode) INTO sTempChd FROM T_SM_SYSFUNC WHERE FIND_IN_SET(psysfuncid,sTempChd)>0;
    END WHILE;
    RETURN sTemp;
    END

    Mysql递归查询:

    SELECT
      s.sysfuncid
    FROM T_SM_SYSFUNC s
    WHERE s.sysfuncid != t.sysfuncid
    AND FIND_IN_SET(s.sysfuncid,FOO3(t.sysfuncid))

    这样就实现在Mysql中实现了和Orecle一样的递归查询了。

  • 相关阅读:
    strstr 的使用
    提取文本中的单词,单词简单排序
    sort 与 qsort
    AC自动机妙用
    字符串中如何提取数值
    字符串提取问题
    字符串搜索
    最短路问题
    树莓派挂载移动硬盘
    Mac 更换桌面背景崩溃(闪退)
  • 原文地址:https://www.cnblogs.com/hooly/p/8137008.html
Copyright © 2011-2022 走看看