数据库库设计:树结构的数据读取
Posted xuexiaodong2009
tags:
篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了数据库库设计:树结构的数据读取相关的知识,希望对你有一定的参考价值。
树形结构在实际中应用很多,但在数据库中一般也是设计为表格,如何读取,子孙节点,或者是祖先节点?
在Oracle中使用start with connect by prior
select * from tablename start with cond1
connect by cond2
where cond3;
start with 子句:遍历起始条件,有个小技巧,如果要查父结点,这里可以用子结点的列,反之亦然。
connect by 子句:连接条件。关键词prior,prior跟父节点列parentid放在一起,就是往父结点方向遍历;prior跟子结点列subid放在一起,则往叶子结点方向遍历,
parentid、subid两列谁放在“=”前都无所谓,关键是prior跟谁在一起。
查找指定节点的所有祖先节点
select * from tablename start with id=76 connect by prior parentid=id
查找指定节点的所有子孙节点
select * from tablename start with id=76 connect by prior id=parentid
在SQL Server 中使用CTE递归查询
CTE的语法:
WITH CTE名称(字段列表)
AS
(
查询语句
)
例如:
WITH lmenu(name,senior)
as
(
SELECT name,senior from menu
)
查找指定节点的所有子孙节点
WITH lmenu(name,id) as
(
/*初始查询*/
SELECT name,id FROM tablename WHERE id=76
UNION ALL
/*递归*/
SELECT A.NAME,A.id FROM tablename A,lmenu b
/*递归条件*/
where a.id = b.parentid
)
/*递归完成后返回数据*/
SELECT * from lmenu
以上是关于数据库库设计:树结构的数据读取的主要内容,如果未能解决你的问题,请参考以下文章