参考http://hi.baidu.com/suofang/blog/item/a58bdd5829d5e583800a1812.html
ORACLE查询树型关系(connect by prior start with)
有如下表结构:
create table TVideoSort
(
FsysId NVARCHAR2(32 char) not null,
FSortName NVARCHAR2(32 char),
FSortTopId NVARCHAR2(32 char),
FSortAddress number,
FSortIsList char(1),
constraint PK_TVIDEOSORT primary key (FsysId)
);
数据如下:
--子查父(通过子节点向根节点追朔.)
查询〔特下边〕的父节点
select FsysId,FSortName,FSortTopId,FSortAddress,FSortIsList from TVideoSort
start with FsysId='3703E5CD81E48D6BE
040007F
01001254'--这个是特下边的fsysid
connect by prior FSortTopId=FsysId
order by FsortAddress
结果
――父查子(通过根节点遍历子节点.)
查询〔特下边〕的子节点:结果
select FsysId,FSortName,FSortTopId,FSortAddress,FSortIsList
from TVideoSort start with FsysId='3703E5CD81E48D6BE
040007F
01001254' --这个是特下边的fsysid
connect by prior FsysId=FSortTopId order by FsortAddress
查询〔特长练习〕的子节点:结果
select FsysId,FSortName,FSortTopId,FSortAddress,FSortIsList
from TVideoSort start with FsysId='36AE4D68EC7D364CE
040007F
01000CA5'
connect by prior FsysId=FSortTopId order by FsortAddress
特别注意,两个查询只是FsysId=FSortTopId不同而已,即子查父则把FSortTopId做为主表放前面,父查子则把FsysId放前面作主表