使用oracle进行遍历树操作
 
1:首先数据库中表必须是树形结构的
2:super_department_id 为 department_id 的父节点编号
3:以下语句的执行结果是:department_id = 88 所有字节点及子子节点的记录
 
select * from pub_department a start with a.department_id = 88 connect by prior a.department_id = a.super_department_id
 
 

Oracle数据库遍历树形结构表

1、从根结点开始找子节点

/*
create table test (id  int ,pid int ,name varchar(10));
insert into test values ( 1, 0 ,'n1' );
insert into test values(  2, 1 ,'n12');
insert into test values(  3, 1 ,'n13');
insert into test values(  4, 2 ,'n21');
insert into test values(  5, 2 ,'n22');
insert into test values(  6, 3 ,'n31');
insert into test values(  7, 3 ,'n32');
insert into test values(  8, 4 ,'n211');
insert into test values(  9, 4 ,'n212');
*/
/*
从根结点开始找子节点(可以指定节点层级)
*/

select id,pid,name ,level from test
--where level =3
start with id =2
connect by prior id =  pid;

2、从叶结点开始找根节点

/*
create table test (id  int ,pid int ,name varchar(10));
insert into test values ( 1, 0 ,'n1' );
insert into test values(  2, 1 ,'n12');
insert into test values(  3, 1 ,'n13');
insert into test values(  4, 2 ,'n21');
insert into test values(  5, 2 ,'n22');
insert into test values(  6, 3 ,'n31');
insert into test values(  7, 3 ,'n32');
insert into test values(  8, 4 ,'n211');
insert into test values(  9, 4 ,'n212');
*/
/*
从叶结点开始找根节点
prior 关键字 与谁放在一起,就是找谁
根节点的父节点不能是他本身,那会造成死循环
*/

select *  from test /*where conditions*/
start with id=7
connect by id = prior pid;

 
 

今天在群里有个朋友问了

起始地     目的地     距离(公里)
A             B             1000
A             C             1100
A             D             900
A             E             400
B             D             300
D             F             600
E             A             400
F             G             1000
C             B             600
请用SQL语句或一段代码写出从A出发,可达到的目的地(包括间接方式)。
这样的问题

create table dest(                  
sid char(1),                        
eid char(1),                        
distance int);                      
insert into dest values('A','B',1000);
insert into dest values('A','C',1100);
insert into dest values('A','D',900);
insert into dest values('A','E',400);
insert into dest values('B','D',300);
insert into dest values('D','F',600);
insert into dest values('E','A',400);
insert into dest values('F','G',1000);
insert into dest values('C','B',600);

很自然的就会想到

select sid from dest connect by prior eid=sid start with sid='A';

但是在运行时提示:ORA-01436: 用户数据中的 CONNECT BY 循环

这是a到e,又从e到a,有死循环......

解决方法:

SELECT distinct eid
FROM dest
START WITH SID='A'
connect by nocycle prior eid=sid

原来connect by里还有nocycle

 

问题:Oracle 树形遍历;结果:使用oracle进行遍历树操作的更多相关文章

  1. MySql/Oracle树形结构查询

    Oracle树形结构递归查询 在Oracle中,对于树形查询可以使用start with ... connect by select * from treeTable start with id='1 ...

  2. oracle 树形表结构查询 排序

    oracle 树形表结构排序 select * from Table start with parentid is null connect by prior id=parentid order SI ...

  3. Oracle树形结构数据-相关知识总结

    Oracle树形结构数据--基本知识 1.数据组成 2.基本查询 2.1.查询某节点及该节点下的所有子孙节点 SELECT   *      FROM QIANCODE.TREE_TABLE_BASI ...

  4. ORACLE 查询一个数据表后通过遍历再插入另一个表中的两种写法

    ORACLE 查询一个数据表后通过遍历再插入另一个表中的两种写法 语法 第一种: 通过使用Oracle语句块  --指定文档所有部门都能查看 declare cursor TABLE_DEPT and ...

  5. oracle 树形SQL

    oracle树形sql查询实例分析   通过此SQL语句  [sql] select  * from tree    查看原始数据如下:     我们要想得到如下的一个树形查询结果如下图所示(包含 R ...

  6. 整理oracle 树形查询

    注:本文参考了<整理oracle 树形查询> sql树形递归查询是数据库查询的一种特殊情形,也是组织结构.行政区划查询的一种最常用的的情形之一.下面对该种查询进行一些总结: create ...

  7. oracle树形语句

    oracle树查询的最重要的就是select…start with…connect by…prior语法了.依托于该语法,我们可以将一个表形结构的以树的顺序列出来.在下面列述了oracle中树型查询的 ...

  8. Oracle树形结构数据---常见处理情景

    Oracle树形结构数据---常见处理情景 1.查看表数据结构 SELECT *      FROM QIANCODE.TREE_HIS_TABLE T  ORDER BY T.NODE_LEVEL; ...

  9. oracle树操作(select start with connect by prior)

    oracle中的递归查询可以使用:select .. start with .. connect by .. prior 下面将会讲述oracle中树形查询的常用方式,只涉及到一张表. 一. 建表语句 ...

随机推荐

  1. Mac键盘图标与对应快捷按键标志汇总 分类

    Mac键盘图标与对应快捷按键 ⌘——Command () win键 ⌃ ——Control ctrl键 ⌥——Option (alt) ⇧——Shift ⇪——Caps Lock fn——功能键就是 ...

  2. java中集合类详解

    集合类说明及区别 Collection ├List │├LinkedList │├ArrayList │└Vector │ └Stack └Set Map ├Hashtable ├HashMap └W ...

  3. Maven基础配置

    重要网址 Maven主页:http://maven.apache.org/ Maven central repository:http://search.maven.org/ Maven aliyun ...

  4. java:RandomAccessFile随机读取文件内容

    RandomAccessFile是用来访问那些保存数据记录的文件的,你就可以用seek( )方法来访问记录,并进行读写了.这些记录的大小不必相同:但是其大小和位置必须是可知的.但是该类仅限于操作文件. ...

  5. Lucene.Net 优化索引生成,即搜索显示优化

    最近发现站内搜索引擎响应速度很慢,因为刚来公司之前技术员跑了源码什么的都没留下.只好自己手动破解源代码dll查找问题所在! 这个问题代码就暂时不贴了这里只写思路 原逻辑:经过整体分析后发现之前是使用 ...

  6. 使用memcache 心得和注意事项

    内存分配机制:首先要说明的是Memcached支持最大的存储对象为1M.它的内存分配比较特殊,但是这样的分配方式其实也是对于性能考虑的,简单的分配机制可以更容易回收再分配,节省对于CPU的使用.这里用 ...

  7. android之Uri的常用几个例子

    显示网页:   1. Uri uri = Uri.parse("http://www.google.com");   2. Intent it = new Intent(Inten ...

  8. 移动端rem设置,自动更改html<font-size>

    <script> (function (doc, win) { var docEl = doc.documentElement, resizeEvt = 'orientationchang ...

  9. 解决win10 phptoshop #fff纯白不是这样的白 显示器高级的问题

    1.打开控制面板,右上角搜索栏输入“颜色管理”, 再打开“颜色管理”.2.在“设备”选项卡里,“设备”下拉列表,选择“显示器”.3.可能你安装过显示器的驱动程序,下面的配置文件中会有一个默认的配置文件 ...

  10. 【暂时解决】win10下安装VS2017 15.3版本 提示 未能安装包“Microsoft.NET.4.6.FullRedist.NonThreshold.Resources,version=4.6.81.9,language=zh-CN”。

    win10下安装VS2017 15.3版本的时候,出现以上错误日志提示,请问如何解决的哇? 这个问题,开始我以为是我的安装包所在的路径问题引起的,但是我将安装包移动到了磁盘根目录进行安装,依然出现这个 ...