`
dyy_gusi
  • 浏览: 209570 次
  • 性别: Icon_minigender_1
  • 来自: 武汉
社区版块
存档分类
最新评论

oracle处理父子节点关系

阅读更多

平时在处理树形结构的关系的时候,是一个很复杂的事情,我们可能通过程序代码去一层一层的遍历父节点或者子节点,这样做的缺点很明显,效率不高而且操作复杂度比较大。而当我们在使用Oracle数据库的时候,我们可以有一种简单解决方法,如下:

 

1.首先创建一张表,保存父子关系

drop table tmp_node;

create table tmp_node(id varchar2(500),p_id varchar2(500));

 

2.向表中插入数据

insert into tmp_node(p_id,id) values(null,1);

insert into tmp_node(p_id,id) values(1,'1-1');

insert into tmp_node(p_id,id) values(1,'1-2');

insert into tmp_node(p_id,id) values('1-1','1-1-1');

insert into tmp_node(p_id,id) values('1-1','1-1-2');

insert into tmp_node(p_id,id) values('1-2','1-2-1');

 

3.查看表中数据

select * from tmp_node;

编号

P_ID

ID

1

 

1

2

1

1-1

3

1

1-2

4

1-1

1-1-1

5

1-1

1-1-2

6

1-2

1-2-1

 

4.创建视图(这一步最重要)

create or replace view tmp_node_view as

select distinct level lvl,connect_by_root(id) leaf_id,t.*

from tmp_node t

connect by prior t.p_id = t.id;

 

5.查看视图数据

select  * form tmp_node_view order by leaf_id,lvl;

编号

LVL

LEAF_ID

ID

P_ID

1

1

1

1

 

2

1

1-1

1-1

1

3

2

1-1

1

 

4

1

1-1-1

1-1-1

1-1

5

2

1-1-1

1-1

1

6

3

1-1-1

1

 

7

1

1-1-2

1-1-2

1-1

8

2

1-1-2

1-1

1

9

3

1-1-2

1

 

10

1

1-2

1-2

1

11

2

1-2

1

 

12

1

1-2-1

1-2-1

1-2

13

2

1-2-1

1-2

1

14

3

1-2-1

1

 

 

6.使用说明

主要使用的leaf_idid两个字段的值。

字段说明:lvl字段代表节点的深度,leaf_id代表叶节点。p_id父节点idid节点本生id

当需要知道一个节点有哪些父节点的时候,只需要根据leaf_id,查询id字段即可:

select * from tmp_node_view where leaf_id = '1-2-1';

编号

LVL

LEAF_ID

ID

P_ID

1

1

1-2-1

1-2-1

1-2

2

3

1-2-1

1

 

3

2

1-2-1

1-2

1

当需要知道一个节点有哪些子节点的时候,只需要根据id查询leaf_id即可:

select * from tmp_node_view where id = '1-2';

编号

LVL

LEAF_ID

ID

P_ID

1

1

1-2

1-2

1

2

2

1-2-1

1-2

1

注意:所有的父节点和子节点的查询,都是包含自身节点的。

1
0
分享到:
评论

相关推荐

    Oracle通过递归查询父子兄弟节点方法示例

    在本篇文章中,我们将探讨如何利用递归查询来查找父子兄弟节点,这对于理解和处理这类关系非常关键。 首先,递归查询在Oracle中主要依赖于`START WITH`和`CONNECT BY`子句。`START WITH`指定查询的起始节点,而`...

    Oracle递归树形结构查询功能

    - `CONNECT BY`:定义了父子节点之间的关系。`PRIOR`关键字用来引用当前行的上一行,即父节点。例如,`CONNECT BY PRIOR dept_id = par_dept_id`表示当前行的父节点的`dept_id`等于上一行的`par_dept_id`。 - `WHERE...

    BIEE父子维度设计

    【BIEE父子维度设计】是指在Oracle Business Intelligence Enterprise Edition (BIEE) 11.6版本中,如何构建并管理具有父子关系的多级层次结构的维度。这种设计通常用于表示组织结构、地理位置或其他有层级关系的...

    父子结点树转化为多级编码探讨与研究

    - **父子结点树形结构**: 在现实世界的应用中,很多数据是以父子结点的形式来表示层级关系的,例如目录结构、组织架构等。这类数据在关系数据库中通常采用表结构存储,其中每个记录(结点)会包含自身的信息以及指向...

    Oracle树查询实例分析

    在实际应用中,为了优化树查询性能,可以考虑创建索引,尤其是对`sjflid`字段,因为它是连接父子节点的关键。同时,避免`NULL`值,用特定的默认值(如0)替换,可以提高查询效率,因为`NULL`值可能导致全表扫描。 ...

    oracle 基于 树结构查询

    Oracle 中的树结构查询基于 CONNECT BY 语句,该语句可以根据父子关系将数据连入树型结构中。 CONNECT BY 语句的基本格式如下: SELECT 。。。CONNECT BY {PRIOR 列名 1=列名 2|列名 1=PRIOR 列名 2}[START WITH]...

    sql查询某个parentid下的所有childid

    `CONNECT BY`是Oracle提供的一种特殊查询方法,用于处理层次结构的数据。它基于一个称为“连接路径”的概念,允许用户按照某种层次关系对表进行递归查询。主要用到的关键字有: - **PRIOR**:用于指定父行和子行...

    Oracle中层次查询的使用和探讨.pdf

    `CONNECT BY`定义了父节点和子节点之间的关联规则,通常与父子节点的关联字段一起使用。`WHERE`从句则用于进一步筛选返回的行,限制结果集的特定条件。 在执行层次查询时,Oracle遵循以下步骤: 1. 选取满足`START ...

    oracle form tree步骤

    每个节点可以代表一个记录或对象,节点之间存在父子关系,用户可以通过展开和折叠节点来查看不同的层级。 1. 创建Tree Item: 在Oracle Forms Builder中,通过菜单选择“Components” -> “Tree”,然后在工作区中...

    DongPu.rar

    1 单条记录的定位,增加,修改,删除,维护单条记录需要考虑父子关系(难度2),叶子节点才能删除(难度1),需要考虑循环(难度3) 2 批量导入,从页面上传指定的txt文件,批量导入到数据库中,可以认为里面的数据...

    oracle数据库startwith用法

    而 `CONNECT BY PRIOR ID = PID` 则定义了父子节点的关系,即每个节点的 `ID` 值与其父节点的 `PID` 值相匹配。 同样的,如果我们要从 `ID = 5` 开始构建层级结构,则可以使用类似的SQL语句: ```sql SELECT * ...

    sql_函数实现三种父子递归

    总之,SQL递归函数是处理层次结构数据的强大工具,通过正向递归查找子节点、反向递归查找父节点以及构建面包屑导航路径,可以灵活地处理各种树形结构的问题。掌握这些技术能够帮助我们在数据库设计和查询中更加高效...

    oracle查询成树状

    在Oracle数据库中,将查询结果转化为树状结构是一项高级而实用的技能,尤其适用于处理具有层级关系的数据,如产品分类、组织架构等。本篇将深入解析如何利用Oracle的特定功能,实现数据的树状展示。 ### 核心概念:...

    Oracle查询树形结构

    根结点是树形结构的起点,连接条件是用于连接父子节点的关系,过滤条件是用于过滤查询结果的条件。 例如,在 DEPT 表中,查询所有部门的树形结构可以使用以下语句: SELECT * FROM persons.dept START WITH deptid...

    ORACLE查询树型关系(connect_by_prior_start_with)

    2. 在 RECURSE 过程中, Oracle 会将当前行的子节点添加到结果集中,并递归地调用 RECURSE 过程,直到所有子节点都被处理完毕。 使用 START WITH 和 CONNECT BY 子句可以实现 SQL 的层次查询,并且可以使用 SYS_...

    层次查询功能在Oracle数据库中的应用.pdf

    第四,CONNECT BY子句的条件从句必须能够表达父子节点关系,通常会使用PRIOR关键字来引用父节点的字段或子节点的字段。 伪列是Oracle数据库中一个特殊的数据对象,它并非数据表中真正的字段,但其在语法处理上类似...

    oracle树查询

    `START WITH`用于指定查询的起始节点,而`CONNECT BY PRIOR`则定义了节点之间的父子关系。 - **`START WITH`**:指定查询的根节点或起始节点。 - **`CONNECT BY PRIOR`**:定义了当前行的某个列值是其父行的另一个...

    oracle树形结构,结合dtree插件使用显示树状结构菜单

    这可能涉及到创建适当的表结构,定义父子节点关系的字段,以及编写查询语句来获取层级数据。查询可能包括查找特定节点的所有子节点,或者遍历整个树以生成菜单。 dtree插件则是在前端展示这些数据的工具,它可能是...

    oracle数据库ppt中科院培训专用Lescn7PPT优秀资料.ppt

    - `CONNECT BY PRIOR`子句定义了父子节点之间的关系,用于指定如何从当前行移动到其父行或子行。`PRIOR`关键字用于引用上一层的数据。 在示例的`EMPLOYEES`表中,每个员工都有一个`MANAGER_ID`字段,表示其直接上级...

Global site tag (gtag.js) - Google Analytics