oralce树形数据结构构建
1,单表:
SELECT * FROM opm_menufolder t START WITH t.parentid is null
CONNECT BY PRIOR t.id = t.parentid ORDER SIBLINGS BY t.parentid
START WITH递归的开始
connect by 是一张表里的递归。
2,多表:
union all 上下合并(join是左右合并),如果是多张表在的树形结构可以先用union查出一个上下合并的结果,然后基于这个结果集(看成一张表)
在这一张表的基础上用单表的迭代,构建树形结构(外层的字段名用里面的别名)
union all 下面的总是子节点
ORDER SIBLINGS BY parentid 完全按树形排序
ORDER BY parentid 分类排序
select * from
(
/*select '权限树' name,'0' id,'-1' parentid from dual */
select t.name name,t.id id,t.parentid parentid from opm_menufolder t
union all select o.name name,o.id id,o.menufolderid from opm_menuitem o
)
start with parentid is null connect by prior id=parentid
select * from
(
/*select '权限树' name,'0' id,'-1' parentid from dual */
select t.name name,t.id id,t.parentid parentid from opm_menufolder t
union all select o.name name,o.id id,o.menufolderid from opm_menuitem o
)
start with parentid is null connect by prior id=parentid ORDER SIBLINGS BY parentid
A:select * from
(
/*select '权限树' name,'0' id,'-1' parentid from dual */
select t.name name,t.id id,t.parentid parentid from opm_menufolder t
union all select o.name name,o.id id,o.menufolderid from opm_menuitem o
union all select l.name name,l.id id,l.menuitemid from opm_menuitemlimit l
)
start with parentid is null connect by prior id=parentid ORDER SIBLINGS BY parentid
另一种:这种数据条数不一致,没有connect by 的 中间断层的也会查出来,(比如opm_menuitemlimit(按钮数据)中有按钮,也挂在了一个opm_menuitem(页面数据)中的页面下,
但是在opm_menuitem表中找不到这个id的页面数据(180????15010401150104))
所以如果要在with as中用递归的话用块中自调的方法(如1,2),否则还是只用于查询块(3中数据多于A的数据就是因为把断层数据算进去)
递归函数写法(单表递归)
CTE(id,name,parentid)这个里面的是列名
1 with CTE(id) AS(
SELECT t.ID id FROM opm_menufolder t where t.id=100000/*//查询出当前省的ID*/
union all /*//显示当前级别以下的所有有关的数据*/
select opm_menufolder.ID id from CTE /*//查找出属于当前省的市,以及县的ID*/
inner join opm_menufolder on CTE.id=opm_menufolder.parentid/*//递归查询*/
) select * from CTE
2 with CTE(id,name) AS(
SELECT t.ID id,t.name name FROM opm_menufolder t where t.parentid is null/*//查询出当前省的ID*/
union all /*//显示当前级别以下的所有有关的数据*/
select opm_menufolder.ID id ,opm_menufolder.name name from CTE /*//查找出属于当前省的市,以及县的ID*/
inner join opm_menufolder on CTE.id=opm_menufolder.parentid/*//递归查询*/
) select * from CTE
3,with CTE(id,name,parentid) AS(
select t.name name,t.id id,t.parentid parentid from opm_menufolder t
union all select o.name name,o.id id,o.menufolderid from opm_menuitem o
union all select l.name name,l.id id,l.menuitemid from opm_menuitemlimit l
) select * from CTE ORDER BY parentid
select t.name name,t.id id,t.parentid parentid from opm_menufolder t (这个和上面的一样,此时的with as 只是查询块)
union all select o.name name,o.id id,o.menufolderid parentid from opm_menuitem o
union all select l.name name,l.id id,l.menuitemid parentid from opm_menuitemlimit l ORDER BY parentid
****************************************************************
注意:with 函数前后要加;
相关推荐
递归树形结构查询主要依赖于`CONNECT BY`和`PRIOR`关键字,它们允许我们构建复杂的层级查询,以展示数据的层次关系。 在Oracle中,树形结构查询的基本语法如下: ```sql SELECT [LEVEL], * FROM table_name START ...
Oracle数据库提供了强大的查询功能,使得对这类树形结构数据的查询变得简单而高效。本文将深入探讨如何使用Oracle的特定查询语法来检索树形结构数据。 首先,要了解的是,在Oracle中,树形结构数据的查询主要依赖于...
在Java中处理这种数据,我们需要遍历这些层级,构建相应的数据模型来表示树形结构。 该博客中提到的"ExecleToDBUtils.java"文件,很可能是用于读取Excel并将其数据转换为适合存储在Oracle数据库中的格式的工具类。...
总结来说,Oracle树形结构结合dtree插件能够帮助开发者有效地展示和操作层次化数据,这对于那些需要直观呈现层级关系的应用场景非常有用。在实际项目中,理解如何使用Oracle的层次查询和dtree插件的配置至关重要,这...
在这个项目中,Oracle用于存储树形菜单的数据结构,如父节点ID、子节点列表等。JSP通过SQL查询语句从数据库中检索菜单项,并根据需要返回给前端。 **动态树形菜单的实现**: 1. **数据结构设计**:首先,需要在...
在这个项目中,Servlet将接收客户端请求,处理数据,然后返回响应,可能是构建树形菜单的数据结构。 2. **Oracle**:Oracle是一种关系型数据库管理系统(RDBMS),广泛应用于企业级应用。在这个项目中,数据可能...
2. 数据库查询:为了从数据库中获取数据并构建树形结构,需要执行SQL查询或其他特定于数据库的语言。这些查询可能涉及SELECT语句,用于检索特定的数据行,并可能包括JOIN操作来连接多个表。 3. 数据绑定:将数据库...
Oracle通常使用自连接来模拟树形结构,即通过一个表中的字段引用自身来建立层级关系。例如,一个"员工"表中,"上级员工ID"字段可以引用"员工ID"字段,形成上下级关系,从而构建出组织结构的树状模型。 查询树结构...
7. **工具与库支持**:许多数据库系统如MySQL、PostgreSQL、Oracle等提供了内置的树形数据类型或函数,如Nested Sets Model、Materialized Path等,以及支持树操作的库,如Python的`sqlalchemy`和`pytree`,可以帮助...
通过理解和掌握Oracle中的递归查询,我们可以有效地处理层次数据,构建和查询复杂的树形结构,这对于管理和维护数据库中的关系型数据至关重要。无论是权限管理还是业务流程分析,递归查询都是一个强大且不可或缺的...
Oracle SQL树形结构查询是一种在数据库中处理层级数据的有效方法,特别是在具有层级关系的数据表中,如组织架构、部门树或文件系统等。Oracle SQL 提供了 `START WITH...CONNECT BY PRIOR` 语句来实现递归查询,使得...
总之,Oracle数据库支持对树形结构数据的高效查询,通过`CONNECT BY`和`START WITH`子句,我们可以轻松地构建和遍历这些层次关系,这对于理解和操作复杂的数据结构至关重要。在进行树结构查询时,理解这些语句的工作...
在实际应用中,我们可能需要将数据库中的树形数据转换成JSON格式,以便于在前端进行显示。JSON(JavaScript Object Notation)是一种轻量级的数据交换格式,易于人阅读和编写,同时也易于机器解析和生成。在Java中,...
2. **树形数据结构**:在计算机科学中,树是一种非线性数据结构,由节点(也称为顶点)和连接节点的边构成。每个节点可以包含零个或多个子节点,形成分层结构。树形数据结构常用于表示分类、文件系统、组织结构等。 ...
开发者可以使用此文件将数据导入到新的数据库环境中,或者分析现有的树形菜单数据结构。 5. **杨文生成树形菜单(纯Struts)**:Struts是Apache的一个开源MVC框架,主要用于Java Web应用的开发。这里的“纯Struts”...
树形数据结构是一种非线性的数据结构,它由节点(数据元素)和边(连接节点的线)组成。每个节点可以有零个或多个子节点,这形成了一个分层结构。在数据库中,这种结构通常通过自关联的表来实现,即一张表中的某个...
树形结构数据库设计是一种常见的数据组织方式,尤其适用于处理层次性数据。本文将深入探讨“树形结构数据库设计”的概念、特点以及如何利用SQL进行操作。 树形结构数据库设计模仿了自然界中的树状模型,每个节点...