问题: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中树形查询的常用方式,只涉及到一张表. 一. 建表语句 ...
随机推荐
- 区间dp的感悟
学区间dp似乎也很久了...对区间dp的通用模型都了解了一些 但是做题还是很坑 上了一点难度的题基本想不出什么思路.. 目前的做题方式就是看题 想一会发现自己不会做 看题解 好巧妙啊 理解后写一发.. ...
- MySQL性能优化-内存参数配置
Mysql对于内存的使用,可以分为两类,一类是我们无法通过配置参数来配置的,如Mysql服务器运行.解析.查询以及内部管理所消耗的内存:另一类如缓冲池所用的内存等. Mysql内存参数的配置及重要,设 ...
- Codeforces Round #283 (Div. 2) E. Distributing Parts 贪心+set二分
E. Distributing Parts time limit per test 2 seconds memory limit per test 256 megabytes input standa ...
- python中set类型总结
set的创建无非有两种方式: 一 直接使用{}创建新的set并初始化 例如: set1 = {1,2,3,"good news",(1,2,3)} #声明的时候可以包含元组,但不能 ...
- Hello Swift
第一个Swift作品,HelloSwift,呵呵.你会把原来的项目用swift改写吗?
- LeetCode OJ:Binary Tree Inorder Traversal(中序遍历二叉树)
Given a binary tree, return the inorder traversal of its nodes' values. For example:Given binary tre ...
- nginx RTMP FFmpeg 视频直播
/**************************************************************************** * nginx RTMP FFmpeg 视频 ...
- 寻找数组中第K大数
1.寻找数组中的第二大数 using System; using System.Collections.Generic; using System.Linq; using System.Text; u ...
- 微信小程序 报错Setting data field "variableName" to undefined is invalid.
Setting data field "variableName" to undefined is invalid. 将数据字段“variableName”设置为未定义是无效的. ...
- Python函数-dir()
dir([object])函数 作用: 没有参数,返回当前本地范围内的名称列表.使用参数,试图返回该对象的有效属性的列表. 说明: 默认dir()机制表现出有不同类型的对象,因为它试图产生最相关的,而 ...