zl程序教程

您现在的位置是:首页 >  数据库

当前栏目

数据库库设计:树结构的数据读取详解数据库

数据库数据 详解 设计 读取 树结构
2023-06-13 09:20:20 时间

树形结构在实际中应用很多,但在数据库中一般也是设计为表格,如何读取,子孙节点,或者是祖先节点?

在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

原创文章,作者:Maggie-Hunter,如若转载,请注明出处:https://blog.ytso.com/6689.html

oracle