`
y806839048
  • 浏览: 1119280 次
  • 性别: Icon_minigender_1
  • 来自: 上海
文章分类
社区版块
存档分类
最新评论

oralce树形数据结构构建

 
阅读更多

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 函数前后要加;

 

  • 大小: 14.5 KB
  • 大小: 25.9 KB
  • 大小: 26.8 KB
  • 大小: 15.9 KB
  • 大小: 17.5 KB
  • 大小: 24.8 KB
分享到:
评论

相关推荐

    Oracle递归树形结构查询功能

    递归树形结构查询主要依赖于`CONNECT BY`和`PRIOR`关键字,它们允许我们构建复杂的层级查询,以展示数据的层次关系。 在Oracle中,树形结构查询的基本语法如下: ```sql SELECT [LEVEL], * FROM table_name START ...

    Excel树形结构数据导入Oracle数据库(Java)

    在Java中处理这种数据,我们需要遍历这些层级,构建相应的数据模型来表示树形结构。 该博客中提到的"ExecleToDBUtils.java"文件,很可能是用于读取Excel并将其数据转换为适合存储在Oracle数据库中的格式的工具类。...

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

    总结来说,Oracle树形结构结合dtree插件能够帮助开发者有效地展示和操作层次化数据,这对于那些需要直观呈现层级关系的应用场景非常有用。在实际项目中,理解如何使用Oracle的层次查询和dtree插件的配置至关重要,这...

    Ajax+jsp+oracle实现动态树形菜单

    在这个项目中,Oracle用于存储树形菜单的数据结构,如父节点ID、子节点列表等。JSP通过SQL查询语句从数据库中检索菜单项,并根据需要返回给前端。 **动态树形菜单的实现**: 1. **数据结构设计**:首先,需要在...

    Java与Oracle实现的树形菜单

    在这个项目中,Servlet将接收客户端请求,处理数据,然后返回响应,可能是构建树形菜单的数据结构。 2. **Oracle**:Oracle是一种关系型数据库管理系统(RDBMS),广泛应用于企业级应用。在这个项目中,数据可能...

    通过数据库管理树形框结构数据源码

    2. 数据库查询:为了从数据库中获取数据并构建树形结构,需要执行SQL查询或其他特定于数据库的语言。这些查询可能涉及SELECT语句,用于检索特定的数据行,并可能包括JOIN操作来连接多个表。 3. 数据绑定:将数据库...

    Oracle树结构查询(图)

    Oracle通常使用自连接来模拟树形结构,即通过一个表中的字段引用自身来建立层级关系。例如,一个"员工"表中,"上级员工ID"字段可以引用"员工ID"字段,形成上下级关系,从而构建出组织结构的树状模型。 查询树结构...

    数据库控制树形结构的生成

    7. **工具与库支持**:许多数据库系统如MySQL、PostgreSQL、Oracle等提供了内置的树形数据类型或函数,如Nested Sets Model、Materialized Path等,以及支持树操作的库,如Python的`sqlalchemy`和`pytree`,可以帮助...

    Oracle中的树状查询(递归查询)

    通过理解和掌握Oracle中的递归查询,我们可以有效地处理层次数据,构建和查询复杂的树形结构,这对于管理和维护数据库中的关系型数据至关重要。无论是权限管理还是业务流程分析,递归查询都是一个强大且不可或缺的...

    Oracle SQL树形结构查询

    Oracle SQL树形结构查询是一种在数据库中处理层级数据的有效方法,特别是在具有层级关系的数据表中,如组织架构、部门树或文件系统等。Oracle SQL 提供了 `START WITH...CONNECT BY PRIOR` 语句来实现递归查询,使得...

    oracle树结构查询方法

    总之,Oracle数据库支持对树形结构数据的高效查询,通过`CONNECT BY`和`START WITH`子句,我们可以轻松地构建和遍历这些层次关系,这对于理解和操作复杂的数据结构至关重要。在进行树结构查询时,理解这些语句的工作...

    树形结构数据库设计和显示

    在实际应用中,我们可能需要将数据库中的树形数据转换成JSON格式,以便于在前端进行显示。JSON(JavaScript Object Notation)是一种轻量级的数据交换格式,易于人阅读和编写,同时也易于机器解析和生成。在Java中,...

    edb数据库保存树形框分支结构源码

    2. **树形数据结构**:在计算机科学中,树是一种非线性数据结构,由节点(也称为顶点)和连接节点的边构成。每个节点可以包含零个或多个子节点,形成分层结构。树形数据结构常用于表示分类、文件系统、组织结构等。 ...

    非常实用的树形菜单,有数据库表

    开发者可以使用此文件将数据导入到新的数据库环境中,或者分析现有的树形菜单数据结构。 5. **杨文生成树形菜单(纯Struts)**:Struts是Apache的一个开源MVC框架,主要用于Java Web应用的开发。这里的“纯Struts”...

    树形查询带记录数量

    树形数据结构是一种非线性的数据结构,它由节点(数据元素)和边(连接节点的线)组成。每个节点可以有零个或多个子节点,这形成了一个分层结构。在数据库中,这种结构通常通过自关联的表来实现,即一张表中的某个...

    树形结构数据库设计

    树形结构数据库设计是一种常见的数据组织方式,尤其适用于处理层次性数据。本文将深入探讨“树形结构数据库设计”的概念、特点以及如何利用SQL进行操作。 树形结构数据库设计模仿了自然界中的树状模型,每个节点...

    无限级树形菜单(Sql数据库)

    Sql数据库,如MySQL、SQL Server或Oracle等,提供了强大的数据处理能力,可以有效地管理无限级别的树形数据。 首先,我们需要设计一个合适的数据库表结构来存储树形菜单的数据。一种常用的方法是使用自引用关系,即...

Global site tag (gtag.js) - Google Analytics