创建表nodelist:
- CREATE TABLE nodelist(
- id INT PRIMARY KEY, -- 本节点ID。
- nodename VARCHAR(20), -- 节点名称,为方便辨别而已。
- pid INT -- 父节点。
- );
插入表测试数据:
- Insert INTO nodelist VALUES(1,'A',null); -- 父节点为,即根节点。
- Insert INTO nodelist VALUES(2,'B',1);
- Insert INTO nodelist VALUES(3,'C',1);
- Insert INTO nodelist VALUES(4,'D',2);
- Insert INTO nodelist VALUES(5,'E',3);
- Insert INTO nodelist VALUES(6,'F',3);
- Insert INTO nodelist VALUES(7,'G',5);
- Insert INTO nodelist VALUES(8,'H',7);
- Insert INTO nodelist VALUES(9,'I',8);
- Insert INTO nodelist VALUES(10,'J',8);
创建函数getChildList():
- CREATE FUNCTION `getChildList`(rootId INT) -- rootId为你要查询的节点。
- RETURNS VARCHAR(1000)
- BEGIN
- DECLARE pTemp VARCHAR(1000);
- DECLARE cTemp VARCHAR(1000); -- 两个临时变量
- SET pTemp = '$';
- SET cTemp =cast(rootId as CHAR); -- 把rootId强制转换为字符。
- WHILE cTemp is not null DO
- SET pTemp = concat(pTemp,',',cTemp); -- 把所有节点连接成字符串。
- SELECT group_concat(id) INTO cTemp FROM nodelist
- WHERE FIND_IN_SET(pid,cTemp)>0;
- -- FIND_IN_SET(str,strlist)的方法网上大把不解释。
- END WHILE;
- RETURN pTemp;
- END
执行方法getChildList(1):
- SELECT getChildList(1);
运行结果如下图:
查询节点为“3”下的所有节点:
- SELECT * FROM nodelist WHERE FIND_IN_SET(id, getChildList(3));
运行结果如下图:
来源 : http://51wifygoo1go.blog.51cto.com/6455479/1122729
相关推荐
### Oracle Start With.Connect By Prior 子句实现递归查询 #### 概述 在Oracle数据库中,`Start With.Connect By Prior`子句是执行递归查询的一种强大工具,主要用于处理层次结构数据。这类数据通常存在于组织...
在Oracle数据库中,递归查询可以通过`START WITH CONNECT BY PRIOR`语句实现。此语句允许用户按照树状结构来检索数据。 ##### 1. `START WITH CONNECT BY PRIOR`用法详解 **基本语法**: ```sql SELECT * FROM ...
Oracle 查询树型关系是指使用 START WITH 和 CONNECT BY 子句来实现 SQL 的层次查询。从 Oracle 9i 开始,可以通过 SYS_CONNECT_BY_PATH 函数实现将父节点到当前行内容以“path”或者层次元素列表的形式显示出来。 ...
CONNECT BY子句通常配合START WITH子句使用,其中START WITH指定了递归的起点,而CONNECT BY用于定义父子关系。CONNECT BY子句中的PRIOR关键字用于表示层级之间的连接,它指向前一个步骤得到的列值。例如,如果当前...
这里,我们将深入探讨如何使用递归查询来构建菜单树,并特别关注在MySQL和Oracle这两种广泛使用的数据库系统中的实现。 首先,我们要理解什么是递归查询。递归查询是一种在数据库中处理层次数据的方法,它通过自身...
connect by递归查询基本语法是: select 1 from 表格 start with … connect by prior id = pId start with:表示以什么为根节点,不加限制可以写1=1,要以id为123的节点为根节点,就写为start with id =123 ...
本文将深入探讨如何通过递归查询来解决这类问题,并着重讲解使用`WITH`语句来实现递归查询的方法,适用于多种数据库系统,如MySQL、PostgreSQL、SQL Server等。 一、理解递归查询 递归查询是一种在数据库中遍历层级...
CONNECT BY PRIOR`子句直接支持递归查询,而SQL Server 2005及以上版本则利用公共表表达式(CTE)的递归调用来实现。POSTgreSQL同样支持CTE子查询进行递归。这些数据库允许在SQL语句中直接对子查询进行递归调用,...
在MySQL中实现树形递归查询,由于MySQL本身并不直接支持类似于Oracle的`START WITH ... CONNECT BY`语法,因此需要采用其他策略。通常,我们可以利用自定义函数或递归查询的方式来处理树形结构数据。以下将详细介绍...
5. **连接函数**:如 `CONNECT_BY_ROOT()`, `START WITH ... CONNECT BY`,用于构建复杂的层次查询。 除了这些基础函数,MySQL 和 Oracle 还支持大量的高级特性,例如窗口函数、递归查询、正则表达式等。在实际应用...
在Oracle中,递归查询主要通过`START WITH`和`CONNECT BY PRIOR`子句实现。 ### 二、递归查询的基本语法 递归查询的基本语法如下: ```sql SELECT column_name(s) FROM table_name START WITH condition CONNECT ...
Oracle的CONNECT BY用于构建层次查询,而在MySQL中可能需要递归的用户定义变量或JOIN操作。子查询在两个系统中语法也略有不同。 7. **事务控制**: Oracle和MySQL都支持事务,但语法上有一些差异。如Oracle使用...
在进行树形查询时,我们通常会用到递归SQL查询或者利用数据库提供的特定功能,如Oracle的CONNECT BY,MySQL的WITH RECURSIVE,或者SQL Server的Hierarchical Queries。这些语法允许我们构建一个层次结构,从根节点...
例如,使用CONNECT BY子句来查询层级关系: ```sql SELECT level, sys_connect_by_path(name, '/') AS 路径 FROM 行政区划 START WITH name = '中国' CONNECT BY PRIOR id = parent_id; ``` 这个查询会返回从'中国...
mysql和sqlserver不知道有没有start with这个sql. jar包:项目中除了使用了struts2,hibernate3.0和spring1.8以外(用spring2.0的包也可以.不能低于1.8的包.)还是用了junit,ajax,第三方的table组件.等等.所以需要下载...
可能需要用到递归查询或者利用层次查询(如MySQL的`WITH RECURSIVE`,Oracle的`START WITH...CONNECT BY`)来遍历所有层级。 3. **前端展示**:在JavaScript中,你可以使用Ajax技术异步地从服务器获取这些数据,...
`Connect By Prior`是Oracle数据库中的一个特殊查询语句,用于检索具有层次结构的数据。它允许你定义节点之间的父/子关系,并按层次顺序检索结果。例如: ```sql SELECT * FROM TBL_TEST START WITH id = 10 ...