问题:Oracle 树形遍历;结果:使用oracle进行遍历树操作
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进行遍历树操作的更多相关文章
- MySql/Oracle树形结构查询
		
Oracle树形结构递归查询 在Oracle中,对于树形查询可以使用start with ... connect by select * from treeTable start with id='1 ...
 - oracle 树形表结构查询 排序
		
oracle 树形表结构排序 select * from Table start with parentid is null connect by prior id=parentid order SI ...
 - Oracle树形结构数据-相关知识总结
		
Oracle树形结构数据--基本知识 1.数据组成 2.基本查询 2.1.查询某节点及该节点下的所有子孙节点 SELECT * FROM QIANCODE.TREE_TABLE_BASI ...
 - ORACLE 查询一个数据表后通过遍历再插入另一个表中的两种写法
		
ORACLE 查询一个数据表后通过遍历再插入另一个表中的两种写法 语法 第一种: 通过使用Oracle语句块 --指定文档所有部门都能查看 declare cursor TABLE_DEPT and ...
 - oracle 树形SQL
		
oracle树形sql查询实例分析 通过此SQL语句 [sql] select * from tree 查看原始数据如下: 我们要想得到如下的一个树形查询结果如下图所示(包含 R ...
 - 整理oracle 树形查询
		
注:本文参考了<整理oracle 树形查询> sql树形递归查询是数据库查询的一种特殊情形,也是组织结构.行政区划查询的一种最常用的的情形之一.下面对该种查询进行一些总结: create ...
 - oracle树形语句
		
oracle树查询的最重要的就是select…start with…connect by…prior语法了.依托于该语法,我们可以将一个表形结构的以树的顺序列出来.在下面列述了oracle中树型查询的 ...
 - Oracle树形结构数据---常见处理情景
		
Oracle树形结构数据---常见处理情景 1.查看表数据结构 SELECT * FROM QIANCODE.TREE_HIS_TABLE T ORDER BY T.NODE_LEVEL; ...
 - oracle树操作(select   start   with  connect by   prior)
		
oracle中的递归查询可以使用:select .. start with .. connect by .. prior 下面将会讲述oracle中树形查询的常用方式,只涉及到一张表. 一. 建表语句 ...
 
随机推荐
- flask--Wtform
			
一.Wtform WTForms是一个支持多个web框架的form组件,主要用于对用户请求数据进行验证. 安装: pip3 install wtform 用途: 1. 用户登录注册 ...
 - JavaScript 获取输入时的光标位置及场景问题
			
前言 在输入编辑的业务场景中,可能会需要在光标当前的位置或附近显示提示选项.比如社交评论中的@user功能,要确保提示的用户列表总是出现在@字符右下方,又或者是在自定义编辑器中 autocomplet ...
 - The tag handler class for "c:forEach" (org.apache.taglibs.standard.tag.rt.core.ForEachTag) was not found on the Java Build Path
			
.tag出现如上错误 <%@ page language="java" contentType="text/html; charset=GB18030" ...
 - OpenStack H版与 Ceph 整合的现状
			
转自:https://www.ustack.com/blog/openstack_and_ceph/ Contents 1 Ceph与Nova整合 2 Ceph与Cinder整合 3 相关Patch ...
 - linux服务器版svn安装
			
1.检查svn是否安装:rpm -aq subversion2.安装命令yum -y install subversion3.建立svn版本库数据存储根目录mkdir -p /application/ ...
 - es6语法入门let 和 const 命令
			
let块级作用域 { let a = 10; var b = 1; } a // ReferenceError: a is not defined. b for循环的计数器,就很合适使用let命令(防 ...
 - C#中DEV控件,XtraTabPage得小方法
			
DEV控件设计窗体程序,XtraTabPage用到的小方法,欢迎大家评论,分享技术! //DEV中的选项卡 private bool TabCtlPageExist(string pageName) ...
 - canvas基础学习(四)
			
今天逛天猫时,看见优衣库店铺首页有个这个飘雪效果,顿时觉得好酷炫,立马从里面copy代码进行学习. 之前我也做过一些canvas特效,往往在canvas全屏时,canvas下层的div就无法进行dom ...
 - BZOJ - 2142 礼物 (扩展Lucas定理)
			
扩展Lucas定理模板题(貌似这玩意也只能出模板题了吧~~本菜鸡见识鄙薄,有待指正) 原理: https://blog.csdn.net/hqddm1253679098/article/details ...
 - Linux命令学习(19):ping命令
			
版权声明 更新:2017-06-13博主:LuckyAlan联系:liuwenvip163@163.com声明:吃水不忘挖井人,转载请注明出处! 1 文章介绍 本文介绍了Linux下面的ping命令. ...