Oracle 递归查询

2014-11-24 17:56:47 · 作者: · 浏览: 0

言归正传所谓递归查询那么数据表中数据的结构应该是符合递归查询的基本条件,即表中有ID,PID(节点编号、父节点编号)如果把数据以UI的方式展现出来应该是一棵或多棵树了。


那么我们要以其中一个节点去递归查询出这个节点子节点或父节点的过程就是我们所要说明的。


递归查询语法:


select ... from tablename where 条件4 start with 条件1 connect by 条件2 AND 条件3


如下面的表结构



--查询平昌县的子节点


SELECT * FROM SC_DISTRICT
START WITH INAME = '平昌县'
CONNECT BY PRIOR IID = PARENT_ID


--查询平昌县的父节点


SELECT * FROM SC_DISTRICT
START WITH INAME = '平昌县'
CONNECT BY PRIOR PARENT_ID= IID


--只是过滤节点BZ为0的,但不会过滤掉节点BZ为0的子节点(这点大家注意了),


--当前也有过滤BZ为0的子节点的办法


SELECT * FROM SC_DISTRICT WHERE BZ = 0
START WITH INAME = '平昌县'
CONNECT BY PRIOR PARENT_ID= IID


--此方式不仅可以过滤掉BZ为0的节点而且会不再去遍历此节点的子节点


SELECT * FROM SC_DISTRICT START WITH INAME = '平昌县'
CONNECT BY PRIOR PARENT_ID= IID AND BZ = 0


如果大家对递归的方式比较了解的话上面的几种方式就很容易理解了。