Home > Database > Mysql Tutorial > Oracle中的树型递归的应用

Oracle中的树型递归的应用

WBOY
Release: 2016-06-07 16:55:07
Original
953 people have browsed it

比如在做一个新闻导航栏时,经常要这样比如:首页gt;gt;Agt;gt;A1gt;gt;A2这样,就是比如点A2这个分类,要显示A2的父亲们的

比如在做一个新闻导航栏时,经常要这样比如:

首页>>A>>A1>>A2

这样,就是比如点A2这个分类,要显示A2的父亲们的名字,在Oracle中,很容易办到,主要使用的是

START WITH...CONNECT BY PRIOR,下面是其用法摘录:

Oracle中的select语句可以用START WITH...CONNECT BY PRIOR子句实现递归查询,connect by 是结构化查询中用到的,其基本语法是:

Java代码

select * from tablename start with cond1

connect by cond2

where cond3;

简单说来是将一个树状结构存储在一张表里,比如一个表中存在两个字段:

id,parentid那么通过表示每一条记录的parent是谁,就可以形成一个树状结构。

用上述语法的查询可以取得这棵树的所有记录。

其中COND1是根结点的限定语句,当然可以放宽限定条件,,以取得多个根结点,实际就是多棵树。

COND2是连接条件,其中用PRIOR表示上一条记录,比如 CONNECT BY PRIOR ID=PRAENTID就是说上一条记录的ID是本条记录的PRAENTID,即本记录的父亲是上一条记录。

COND3是过滤条件,用于对返回的所有记录进行过滤。

对于Oracle进行简单树查询(递归查询)

DEPTID NUMBER部门id

PAREDEPTID NUMBER父部门id(所属部门id)

NAME CHAR (40 Byte)部门名称

通过子节点向根节点追朔.

select * from persons.dept start with deptid=76 connect by prior paredeptid=deptid

通过根节点遍历子节点.

Java代码

select * from persons.dept start with paredeptid=0 connect by prior deptid=paredeptid

可通过level 关键字查询所在层次.

Java代码

select a.*,level from persons.dept a start with paredeptid=0 connect by prior deptid=paredeptid

PS:start with 后面所跟的就是就是递归的种子,也就是递归开始的地方;

connect by prior后面的字段顺序是有讲究的;

若prior缺省:则只能查询到符合条件的起始行,并不进行递归查询;

linux

Related labels:
source:php.cn
Statement of this Website
The content of this article is voluntarily contributed by netizens, and the copyright belongs to the original author. This site does not assume corresponding legal responsibility. If you find any content suspected of plagiarism or infringement, please contact admin@php.cn
Popular Tutorials
More>
Latest Downloads
More>
Web Effects
Website Source Code
Website Materials
Front End Template