精华内容
下载资源
问答
  • 递归查询

    2014-11-17 18:57:14
    第一个是定位成员(Anchor Member,AM),它是一个非递归查询,第二个是递归成员(Recursive Member,RM),它是递归查询.在CTE括号中(AS 子句之后),定义独立查询或引用回相同CTE的查询,AM与RM由UNION ALL语句分隔.AM紧被调用...

    CTE递归原理:

         递归CTE是由两个最小查询构建的.第一个是定位成员(Anchor Member,AM),它是一个非递归查询,第二个是递归成员(Recursive Member,RM),它是递归查询.在CTE括号中(AS 子句之后),定义独立查询或引用回相同CTE的查询,AM与RM由UNION ALL语句分隔.AM紧被调用一次,RM将被重复调用,直到查询不在返回数据行为止.可以使用UNION或UNION ALL运算符彼此追加多个AM,具体取决于是否希望删除重复数据(必须使用UNION ALL运算符来追加递归成员).语法如下:

    ;WITH  SimpleRecursive ( id, pid )
    AS ( SELECT id, pid  from  t_table 
    	WHERE id = @id ---根节点
    	UNION ALL
    	SELECT  t.id, t.pid
    	FROM  t_table as t
    	INNER JOIN SimpleRecursive A ON (t.pid = A.id)
    	)
    SELECT  id,pid FROM SimpleRecursive 
    OPTION(MAXRECURSION 25) 

     根据设计,递归成员将一直查找子记录,并可以无限循环.如果您怀疑将会进行许多循环,并希望限制递归调用次数,可以使用OPTION子句在外部查询的后面指定MAXRECURSION选项.

    OPTION(MAXRECURSION 25)

     

    这一选项将使sql server2005在cte出现指定限制时产生一条错误.默认情况下,限制为100(即省略该选项时).要不想指定选项.必须将MAXRECURSION设为0.

    ok,CTE递归查询完成了.

    展开全文
  • 递归查询(向下递归) 请看此文章mysql递归查询递归查询(向上递归) 网上有三种写法,我只是对三种写法做了试验而做出部分总结,如果想看原文请点击此连接 有一张表gt_catalague,有两种重要的字段GUID,父ID ...

    递归查询(向下递归)

    请看此文章mysql递归查询

    反递归查询(向上递归)

    网上有三种写法,我只是对三种写法做了试验而做出部分总结,如果想看原文请点击此连接
    有一张表gt_catalague,有两种重要的字段GUID,父ID PARENT_ID,结构如图所示在这里插入图片描述
    1.第一种

    SELECT
     @pv AS _guid,
     (SELECT @pv := PARENT_ID FROM gt_catalague WHERE GUID = _guid) as _PARENTID
    FROM
     gt_catalague b,
     (SELECT @pv := '2c60b1d3ac99423bb53bb9f4c9982688') p
    

    第一次执行会报错,如图所示在这里插入图片描述
    第二次执行不报错,但不是我们想要的结果,如图所示
    在这里插入图片描述
    2.第二种

    SELECT 
    		@r AS _guid,
    		(SELECT @r := PARENT_ID FROM gt_catalague WHERE GUID = _guid) AS _PARENTID, 
    		@l := @l + 1 AS lvl 
    FROM 
    		(SELECT @r := '2c60b1d3ac99423bb53bb9f4c9982688', @l := 0) m, 
    		gt_catalague n
    WHERE @r <> '0'
    

    第一次执行会报错,如图所示
    在这里插入图片描述
    第二次执行,结果如下
    在这里插入图片描述
    3.第三种

    SELECT *
    FROM
     gt_catalague,
     (SELECT @pv := '2c60b1d3ac99423bb53bb9f4c9982688') p
    WHERE
     (
    	FIND_IN_SET(guid, @pv) > 0
    	AND @pv := CONCAT(@pv, ',', PARENT_ID)
     )
    

    第一次执行也无错误信息,结果是我们想要的如图
    在这里插入图片描述
    总结
    MySQL数据库中没有Oracle那种递归查询语句,所以只能自己写查询语句。网上也有写MySQL函数的,与MySQL查询语句各有利弊。如果想用查询语句写递归请参考此连接递归查询,反递归请参考上面第三种方式。如有不对的地方请指正。

    展开全文
  • MySql递归查询和Oracle递归查询

    千次阅读 2016-07-07 14:42:40
    MySql的递归查询和 Oracle的递归查询

    首先说一下Oracle的递归查询,相信大部分人都知道很简单。无非start with connect by 函数。下面是从pId向子节点递归查询的例子,unId是数据库表中的主键。



    如果是从子节点递归到父节点查询,就把start with 换成unid,prior左右对换



    下面再讲MySql 的递归查询方式。MySql没有Oracle的强大功能,虽然都是同一个公司的产品。所以只能靠自己写。有很多方法,用sql去循环查询,或者写存储过程,我这里只提供一种。就是新建一个function函数。

    表结构不说了,无非就是 Id ,pId,其他列。下面是创建一个递归查询子节点的函数


    DROP FUNCTION IF EXISTS queryChildrenPowerInfo;
    CREATE FUNCTION `queryChildrenPowerInfo` (powerId VARCHAR(2000))
    RETURNS VARCHAR(2000)
    BEGIN

    DECLARE sTemp VARCHAR(2000);
    DECLARE sTempChd VARCHAR(2000);
    SET sTemp = '$';
    SET sTempChd = cast(powerId as CHAR);

    WHILE sTempChd is not NULL DO
    SET sTemp = CONCAT(sTemp, ',', sTempChd);
    SELECT group_concat(id) INTO sTempChd FROM t_discretionary_power where FIND_IN_SET(pId,sTempChd)>0;
    END WHILE;
    return sTemp;
    END

    调用的时候:select  queryChildrenPowerInfo("fa2528924c7e9168014c9bedfe04039c"); 该语句会返回Id和父Id等于传入参数powerId的一个字符串,中间有逗号隔开如图

    下面这句代码的意思是,查询出 t_discretionary_power  表中,t.id 等于上面查询出的结果集的数据。FIND_IN_SET(A,B)是MYSQL的函数。意思是查找在B集合中有A的数据。相当于In
    select t.* from t_discretionary_power  t where FIND_IN_SET(t.id,queryChildrenPowerInfo('fa2528924c7e9168014c9bedfe04039c'))


    按照递归查询子节点的方法,反过来就可以递归查询父节点,这里就不再写了。希望能对大家有用


    展开全文
  • 树PostgreSQL的递归查询

    2017-12-24 15:11:36
    树PostgreSQL的递归查询树PostgreSQL的递归查询树PostgreSQL的递归查询
  • 深入sql oracle递归查询

    2020-12-16 10:10:13
    表的所有列名 select name from sysobjects where xtype=’u’ select name from syscolumns where id=(select max(id) from sysobjects where xtype=’u’ and name=’表名’)☆ 递归查询数据Sql语句里的递归查询...
  • mysql递归查询.doc

    2019-08-17 09:23:11
    mysql递归查询,适合多分类查询。对于数据库中的树形结构数据,如部门表,有时候,我们需要知道某部门的所有下属部分或者某部分的所有上级部门,这时候就需要用到mysql的递归查询
  • 由于在项目中用到了向上查询父节点的递归查询和向下查询子节点查询的递归查询,由于在实现过程中,写递归查询的sql函数 花费了较长的时间,所以在此总结一下,两种递归查询的函数的实现写法:  向下查询子节点的...

    本文为博主原创,未经允许不得转载:

    由于在项目中用到了向上查询父节点的递归查询和向下查询子节点查询的递归查询,由于在实现过程中,写递归查询的sql函数

    花费了较长的时间,所以在此总结一下,两种递归查询的函数的实现写法:

      向下查询子节点的递归查询:

    先展示表结构:

           根据区域查询对应的下级区域信息,其中parentId为zoneId对应的下级区域id信息。当再查询下级区域信息时,即可将parentID作为zoneId来

    查询子节点信息,由于不同区域对应的子节点层数也不一样,当要获取所有子节点的zoneId时,可以使用以下的递归查询:

    BEGIN
        DECLARE sTemp VARCHAR(10000);
        DECLARE sTempChd VARCHAR(10000);
    
        SET sTemp = '$';
        SET sTempChd =CAST(rootId AS CHAR);
    
        WHILE sTempChd IS NOT NULL DO
            SET sTemp = CONCAT(sTemp, ',', sTempChd);
            SELECT GROUP_CONCAT(zoneid) INTO sTempChd FROM  tbl_zone_info WHERE STATUS!='3' and FIND_IN_SET(parentid,sTempChd)>0;
           END WHILE;
        RETURN sTemp;
    END

    使用方式:

     

     

    向上查询的父查询递归查询:

      先展示表结构:

     

     根据组id查询对应的父组有哪些:parentId即为对应groupId组id的父组id,当获取到父组id即parentid,即可以将parentId作为groupId组id

    查询到父组的信息。

    实现的递归函数为:

    BEGIN   
    DECLARE fid varchar(100) default '';   
    DECLARE str varchar(1000) default rootId;   
      
    WHILE rootId is not null  do   
        SET fid =(SELECT PARENTID FROM tbl_group_info WHERE GROUPID = rootId);   
        IF fid is not null THEN   
            SET str = concat(str, ',', fid);   
            SET rootId = fid;   
        ELSE   
            SET rootId = fid;   
        END IF;   
    END WHILE;   
    return str;  
    END

    使用方式:

     

     当得知层级关系时,可以直接使用以下sql,进行自我联查:

    select  a.GROUPNAME AS lev1,b.GROUPNAME AS lev2,c.GROUPNAME AS lev3,d.GROUPNAME AS lev4 from tbl_group_info a
    LEFT JOIN tbl_group_info b ON a.PARENTID  = b.GROUPID
    LEFT JOIN tbl_group_info c ON b.PARENTID  = c.GROUPID
    LEFT JOIN tbl_group_info d ON c.PARENTID  = d.GROUPID
    where a.GROUPID = '320100201712010942533991024gleax'

     

    展开全文
  • MSSQLSERVER递归查询CTE

    2018-12-05 21:47:37
    MSSQLSERVER递归查询CTE,以一个实例详细介绍CTE的初始查询、递归查询、终止条件并分步骤图文并茂的进行讲解
  • mysql递归查询

    2020-08-31 20:55:49
    文章目录1、Oracle 递归查询1.1 prior 在子节点端(向下递归)2.1 prior 在父节点端(向上递归)2、MySQL 递归查询find_in_set 函数concatconcat_wsgroup_concatMySQL 自定义函数,实现递归查询手动实现递归查询...
  • MySql递归查询

    千次阅读 2018-04-26 15:25:24
    Mysql的递归查询实现
  • postgres 递归查询

    2020-08-13 20:30:22
    pg递归查询
  • 项目中需要递归查询,简单的写了一个,记录一下。  具体查询sql就不贴出来了,每个业务都不一样,但是都差不多,基本上都是根据父类搜索下面的子类。  public Result selectMarketingLbl() {  Result result =...
  • 数据库递归查询

    2019-11-26 16:12:28
    oracle,mysql递归查询mysql向下递归查询当前节点下所有子节点调用方式向上递归查询所有父节点调用方式oracle START WITH 用法 oracle递归查询比mysql递归查询要简单的多,oracle中递归只要实现START WITH …CONNECT...
  • mysql递归查询.txt

    2018-10-30 09:28:26
    mysql递归查询.txt,里面写了mysql递归查询的例子,方便需要的朋友使用,可读性强,简单实用
  • 1.遇到问题(递归查询子节点时有两个pid如何更改) 2.附上oracle代码:(想在mysql做替换) select * from dataclean_element t start with t.id=#{nodeId} CONNECT BY PR OR t.id in(t.src_id,t.tag_id) 3.报错...
  • mysql 递归查询

    2019-09-05 19:51:46
    mysql 递归查询 mysql 使用FIND_IN_SET() 和 GROUP_CONCAT()函数递归查询 向下递归 -- 向下递归 找所有子节点 DROP FUNCTION IF EXISTS queryChildrenDownInfo; -- 删除函数 DELIMITER ; -- 块的概念,其中的整块...
  • DNS迭代查询和递归查询的区别.docx
  • 主要介绍了sql server实现递归查询的方法,结合具体实例形式分析了SQL Server递归查询的原理与实现技巧,需要的朋友可以参考下
  • MySQL递归查询

    2013-07-15 15:42:47
    MySQL递归查询,oracle在迁移成mysql后难免会遇到的问题。
  • SqlServer实现递归查询

    2020-12-14 19:18:27
    例如,现在需要查询出西湖区以及西湖区所属的市和省,这时候就需要用到SQL递归查询。我在这里构造了一张数据表[tb_Test],其数据如下所示: Id Name ParentId 1 浙江省 NULL 2 杭州市 1 3 湖州市 1 4 滨江区 2 ...
  • Mysql递归查询

    2018-05-04 17:30:17
    最近新项目使用改用Mysql,遇到了一个递归查询的问题,查阅资料后,发现mysql并没有类似orcale的connect by递归查询的方法。 关于oracle的查询, 可以查看我的另一篇博文: ...
  • 主要介绍了根据递归到迭代转化的思路,利用SQL实现了MYSQL的递归查询,需要的朋友可以参考下
  • 递归查询 迭代查询
  • mybatis递归查询菜单树

    2018-05-30 16:45:43
    这是一个springboot架构搭建的一个整合mybatis递归查询的demo,其中整合了分布式事物jta,mybatis的分页插件等
  • MySQL实现递归查询

    千次阅读 2019-08-13 14:52:32
    前几日有客户咨询关于mysql实现递归查询的方法,当时简单了解了一下,觉得递归查询逻辑层面一种特殊查询方式。但是后来才发现这是一种很常见的查询需求,例如某些评论楼层的折叠显示、各类流程图等用递归查询都能...
  • 大家在用mysql递归查询的时候,肯定或多或少的会碰到一些问题,像小编就遇到了天大的坑(如下图),于是自己踩了坑,我得想办法把它铺一铺吖,避免大家也同时遇到这样的问题。让技术人能够快速的解决问题。 遇到问题...

空空如也

空空如也

1 2 3 4 5 ... 20
收藏数 175,702
精华内容 70,280
关键字:

递归查询