- 浏览: 236142 次
- 性别:
- 来自: 深圳
文章分类
最新评论
-
netwelfare:
文章的格式有点乱啊,看起来很费事啊。推荐看这个系列的json教 ...
java 操作JSON -
yangqingandjay:
ijoi刚好一个月[color=orange][align=c ...
spring 定时器配置 -
Jxdwuao:
不错, 很好用
spring 定时器配置 -
1870702720:
3楼说的可以,之前我一直以为想配置在一个定时器中,可是实现不了 ...
spring 定时器配置 -
taiwei.peng:
你可以配置两个定时器,这是我个人的想法,仅供参考。
spring 定时器配置
关键字:oracle connect by level 树状结构表
定义如下id 和 名称描述
1— 省长 <--- 2,3 (省长管辖市长、县长)
2— 市长 <--- 5,6 (市长管辖模范村村长和一个平民)
3— 县长 <--- 4,7,8,9 (县长管辖镇长和三个平民)
4— 镇长 <--- 10,11,12,13 (管辖四个平民)
5— 村长 <--- 14,15 (管辖两个平民)
其他(6-15)— 平民(没有管辖任何人)
只有省长、市长和县长能处理问题,那么每个人出了问题应该首先找谁来解决?
省长权利最大,自己出了问题自己解决,别人也没法知道; 可以认为在关系表里省长的父节点是自己。
查看一下关系树:
查看父子关系情况:
下面要看一看:每个人有事时,首先找到谁来处理?不能每个人有事都找省长吧。
下面的sql使用了oracle家的两个变态函数:first_value & connect_by_root
这个sql到底行不行,再加条数据看看
定义如下id 和 名称描述
1— 省长 <--- 2,3 (省长管辖市长、县长)
2— 市长 <--- 5,6 (市长管辖模范村村长和一个平民)
3— 县长 <--- 4,7,8,9 (县长管辖镇长和三个平民)
4— 镇长 <--- 10,11,12,13 (管辖四个平民)
5— 村长 <--- 14,15 (管辖两个平民)
其他(6-15)— 平民(没有管辖任何人)
只有省长、市长和县长能处理问题,那么每个人出了问题应该首先找谁来解决?
省长权利最大,自己出了问题自己解决,别人也没法知道; 可以认为在关系表里省长的父节点是自己。
- create table person(id int primary key, description varchar2(50));
- create table relationship(child int, parent int, primary key(child,parent));
- insert into person values(1,‘省长’);
- insert into person values(2,‘市长’);
- insert into person values(3,‘县长’);
- insert into person values(4,‘镇长’);
- insert into person values(5,‘村长’);
- insert into person values(6,‘平民’);
- ...//省略的都是平民
- insert into person values(15,‘平民’);
- insert into relationship values(1,1); //关系如下
- insert into relationship values(2,1);
- insert into relationship values(3,1);
- insert into relationship values(5,2);
- insert into relationship values(6,2);
- insert into relationship values(4,3);
- insert into relationship values(7,3);
- insert into relationship values(8,3);
- insert into relationship values(9,3);
- insert into relationship values(10,4);
- insert into relationship values(11,4);
- insert into relationship values(12,4);
- insert into relationship values(13,4);
- insert into relationship values(14,5);
- insert into relationship values(15,5);
create table person(id int primary key, description varchar2(50)); create table relationship(child int, parent int, primary key(child,parent)); insert into person values(1,‘省长’); insert into person values(2,‘市长’); insert into person values(3,‘县长’); insert into person values(4,‘镇长’); insert into person values(5,‘村长’); insert into person values(6,‘平民’); ...//省略的都是平民 insert into person values(15,‘平民’); insert into relationship values(1,1); //关系如下 insert into relationship values(2,1); insert into relationship values(3,1); insert into relationship values(5,2); insert into relationship values(6,2); insert into relationship values(4,3); insert into relationship values(7,3); insert into relationship values(8,3); insert into relationship values(9,3); insert into relationship values(10,4); insert into relationship values(11,4); insert into relationship values(12,4); insert into relationship values(13,4); insert into relationship values(14,5); insert into relationship values(15,5);
查看一下关系树:
- select rpad('---',(level-1)*3,'---')||child relation_tree
- from relationship
- start with child=parent
- connect by nocycle prior child=parent; --结果如下
- RELATION_TREE
- ------------------
- 1
- ---2
- ------5
- ---------14
- ---------15
- ------6
- ---3
- ------4
- ---------10
- ---------11
- ---------12
- ---------13
- ------7
- ------8
- ------9
- 已选择15行。
select rpad('---',(level-1)*3,'---')||child relation_tree from relationship start with child=parent connect by nocycle prior child=parent; --结果如下 RELATION_TREE ------------------ 1 ---2 ------5 ---------14 ---------15 ------6 ---3 ------4 ---------10 ---------11 ---------12 ---------13 ------7 ------8 ------9 已选择15行。
查看父子关系情况:
- select child,parent
- from relationship
- start with child=parent
- connect by nocycle prior child=parent
- order by parent; --结果如下
- CHILD PARENT
- ---------- ----------
- 1 1
- 2 1
- 3 1
- 5 2
- 6 2
- 4 3
- 8 3
- 7 3
- 9 3
- 11 4
- 12 4
- 10 4
- 13 4
- 14 5
- 15 5
- 已选择15行。
select child,parent from relationship start with child=parent connect by nocycle prior child=parent order by parent; --结果如下 CHILD PARENT ---------- ---------- 1 1 2 1 3 1 5 2 6 2 4 3 8 3 7 3 9 3 11 4 12 4 10 4 13 4 14 5 15 5 已选择15行。
下面要看一看:每个人有事时,首先找到谁来处理?不能每个人有事都找省长吧。
下面的sql使用了oracle家的两个变态函数:first_value & connect_by_root
- select distinct child ,first_value(parent)over(partition by child order by lv) parent
- from(
- select connect_by_root(r.child) child, p.description descr, level lv, r.parent
- from person p ,relationship r
- where p.id= r.parent
- connect by nocycle prior r.parent=r.child
- )
- where descr in('省长', '市长', '县长')
- order by parent,child; --结果如下
- CHILD PARENT
- ---------- ----------
- 1 1
- 2 1
- 3 1
- 5 2
- 6 2
- 14 2
- 15 2
- 4 3
- 7 3
- 8 3
- 9 3
- 10 3
- 11 3
- 12 3
- 13 3
- 已选择15行。
select distinct child ,first_value(parent)over(partition by child order by lv) parent from( select connect_by_root(r.child) child, p.description descr, level lv, r.parent from person p ,relationship r where p.id= r.parent connect by nocycle prior r.parent=r.child ) where descr in('省长', '市长', '县长') order by parent,child; --结果如下 CHILD PARENT ---------- ---------- 1 1 2 1 3 1 5 2 6 2 14 2 15 2 4 3 7 3 8 3 9 3 10 3 11 3 12 3 13 3 已选择15行。
这个sql到底行不行,再加条数据看看
- insert into person values(333,‘县长’);
- insert into person values(555,‘村长’);
- insert into person values(666,‘平民’);
- insert into person values(777,‘平民’);
- insert into relationship values(333,1);
- insert into relationship values(555,333);
- insert into relationship values(666, 555);
- insert into relationship values(777,666);
- --666这个平民有¥,777愿意跟着他(这条记录比较特殊)
发表评论
-
时效承诺明细产品流向存储过程
2016-05-04 14:30 0CREATE OR REPLACE PROCEDURE ST ... -
oracle 小知识点
2016-05-02 15:46 519oracle 默认排序空值在后面,显示在前面用nvl(co ... -
oracle 分析函数
2016-05-02 15:17 329row_number() over(partition by ... -
时效承诺明细行政区到城市
2016-04-28 13:18 0CREATE OR REPLACE PROCEDURE ST ... -
修改行政区ID的存储过程
2016-04-28 13:15 0CREATE OR REPLACE PROCEDURE S ... -
hive 资料
2016-04-11 20:07 0hive 培训资料 -
oracle 三种表连接方式
2016-04-10 18:04 953oracle 小知识 1.oracle 查看表大小 SEL ... -
sql 基本优化
2016-03-17 21:58 6641.select语句中避免使用*;2.ORACLE 采用从 ... -
最近存储过程
2015-07-28 10:43 571CREATE OR REPLACE PROCEDURE STP ... -
临时取数脚本
2015-07-23 10:39 664--01 删除表中的现有数据 TRUNCATE TABLE T ... -
oracle 开窗函数使用,merge
2014-10-14 15:17 927select cast(last_operate_tm as ... -
oracle case when then 用法
2014-10-11 12:15 1225SELECT D.DEPT_CODE, ... -
oracle 创建无参存储过程
2014-09-23 15:26 1489create or replace procedure pro ... -
Oracle表分区与索引的创建
2013-10-22 11:00 1430create table TT_FLOW_TEST ( i ... -
PL SQL Develop中文乱码问题
2013-03-29 10:53 22801.准备软件 下载 oracle client客服端工具包 ... -
Oracle DB link
2012-11-05 22:29 1036drop database link jc_zd cre ... -
Oracle 下的自定义函数
2012-10-21 15:25 922create or replace function MY_L ... -
Oracle 带游标的存储过程
2012-10-21 15:11 1152CREATE OR REPLACE PROCEDURE ST ... -
oracle 查询日期
2011-09-02 11:53 1084--查询一个季度的第一天select trunc(sysda ... -
返回自定义游标的存储过程
2011-09-02 11:51 1029create or replace procedure pro ...
相关推荐
总之,Oracle的递归树形结构查询功能是处理层次数据的强大工具,能够有效地支持组织结构、树状分类等业务场景。通过熟练掌握这一特性,开发者可以在数据库层面高效地解决复杂的数据查询问题,减少应用程序的负担。
在构建应用程序时,特别是涉及到用户界面的交互,如菜单系统,我们经常需要将数据组织成层次结构,例如树形结构。这里,我们将深入探讨如何使用递归查询来构建菜单树,并特别关注在MySQL和Oracle这两种广泛使用的...
oracle菜单树查询 使用实例 使用START WITH CONNECT BY PRIOR子句实现递归查询
这个文件可能包含了用于从Oracle数据库中获取树形结构数据的SQL查询语句,其中可能使用了`CONNECT BY`或`START WITH`等关键字来实现递归。分析这个文件的内容可以帮助我们了解如何构建适合dhtmlx Tree的递归查询。 ...
为了更好地理解Oracle中的递归查询,我们首先需要创建一张表格来存储一个简单的树形结构。下面是一张名为`TEST_TREE`的表,包含以下列: - `ID`: 主键,标识每个节点。 - `PID`: 父节点ID,表示当前节点的上一级...
通过以上步骤,我们可以实现一个完整的树形结构菜单系统,让用户在前端直观地浏览和操作Oracle数据库中的层级数据。不过,具体实现细节会因dtree插件版本和具体业务需求而有所不同,因此在实际操作中需要查阅相关...
总结来说,"Ajax+jsp+oracle实现动态树形菜单"项目是一个典型的前后端交互示例,它结合了客户端的Ajax技术、服务器端的JSP处理以及数据库操作,展示了如何高效地处理和展示层次结构的数据。通过理解这些技术的原理和...
5. **TreeView组件**:在前端,"treeview"可能是指一个用于展示树形结构的用户界面组件。这可能是一个JavaScript库,如jQuery UI的TreeView,或者是基于现代前端框架如React或Vue的组件。TreeView接收从服务器端发送...
为了展示无限级树形菜单,我们可以使用编程语言(如Java、C#、Python等)与数据库交互,将查询结果转换成树形结构。这通常涉及递归函数,遍历查询结果并构建树节点。每个节点包含其自身的属性(如名称、URL等),...
3. **遍历与构建**:为了生成实际的树形结构,可以使用递归查询或者层次遍历方法。递归查询从根节点开始,逐层扩展到子节点;层次遍历则可以使用栈或队列等数据结构,按照深度优先或广度优先的顺序遍历所有节点。 4...
递归算法可以将菜单数据结构转换为树形结构,从而生成多级菜单。在本文中,我们将使用 SpringBoot 框架和 Vue.js 框架来实现递归生成多级菜单。 知识点四:数据库设计 在实现递归生成多级菜单时,需要设计一个合适...
在前端展现方面,JavaScript库如jQuery、React、Vue等都有成熟的组件可以方便地渲染树形结构。常见的有`TreeView`组件,它们通常支持异步加载、节点展开/折叠、拖拽排序等功能。同时,前端需要与后端接口配合,通过...
在SQL中,递归函数是处理层次结构数据的有效方法,特别是在构建树形结构如菜单树或权限树时。本文将探讨如何使用SQL函数实现三种常见的递归查询:找到所有子节点、查找所有父节点以及面包屑导航数据。我们将通过一个...
- **动态生成树形菜单**:为了让树形菜单具备动态加载的功能,通常需要后端提供一个接口来获取树形数据,然后前端根据接收到的数据动态生成对应的菜单项。 - 这种方法的好处在于可以显著减少页面的初始加载时间,...
例如,我们可能有一个`departments`表,包含`id`、`name`和`parent_id`字段,可以写一个DAO层的方法来获取树形结构: ```java public List<TreeNode> getTreeNodes() { // SQL查询 // ... // 转换查询结果为...
这两个子句是Oracle特有的,用于处理层级关系的数据,例如组织结构、产品分类或者树形菜单等。理解并掌握这两种子句的用法对于处理层级数据至关重要。 `START WITH`子句用于指定查询的起始节点,也就是树结构中的根...
`dtree`插件则是一个用于前端展示的树形结构组件,它可以优雅地展示这些动态生成的菜单。 首先,我们需要理解Java如何从数据库获取菜单数据。通常,菜单数据存储在关系型数据库如MySQL、Oracle或PostgreSQL中的表中...
树形查询是指在数据库中查询具有层级关系的数据,例如部门结构、菜单系统等。MyBatis Plus提供了树形查询的支持,可以通过递归方式或者父子ID关联方式实现。在本项目中,可能涉及到的树形查询场景如组织架构、分类...
- 递归查询主要用于处理层级数据,例如组织结构、树形菜单等。在Oracle数据库中,我们可以使用`CONNECT BY`子句实现递归查询。 - 1.2.1 递归查询:通过`CONNECT BY`和`PRIOR`关键字,从指定的根节点(`t.orgid = ...