文档章节

关于Oracle递归查询

r
 renhongjin
发布于 2015/06/02 11:35
字数 300
阅读 12
收藏 0
点赞 0
评论 0

有这样一个表:DEPT

ID ID

PARENT_ID 父部门ID,顶级部门的父部门为null

DEPT_NAME 部门名称


如果要从顶级部门开始递归所有部门:


select level,a.* from DEPT a start with a.PARENT_ID is null
connect by prior a.ID=a.PARENT_ID



level:层次

start_with:入口部门

prior:前序遍历

ID=PARENT_ID:从入口部门开始往下递归

PARENT_ID=ID:从入口部门开始往上递归


了解了上述规则,则不难写出从某部门开始的所有下级部门:

select level,a.* from DEPT a start with a.ID = 3
	connect by prior a.ID=a.PARENT_ID


从某部门开始的上级部门:

select level,a.* from DEPT a start with a.ID = 3
	connect by prior a.PARENT_ID = a.ID


如果要在以上结果中进行排除,如排除当前部门,即某部门的上级部门(注意where筛选在递归结果之后进行):

select level,a.* from DEPT a
	where a.ID != 3
	start with a.ID = 3
	connect by prior a.PARENT_ID = a.ID


如果还想按层级显示部门名称,如:

ID    NEW_DEPT_NAME              DEPT_NAME

3     部门A/部门A-1/部门A-1-1      部门A-1-1

可以使用如下语句:

select level,
	ltrim(sys_connect_by_path(a.DEPT_NAME,'',''),'','') NEW_DEPT_NAME,
	a.*
	from DEPT a
	start with a.ID = 3
	connect by prior a.ID=a.PARENT_ID


本文转载自:http://6tail.cn/npress/action-Article/detail?id=1411022156843000

共有 人打赏支持
r
粉丝 1
博文 13
码字总数 744
作品 0
攀枝花
oracle中用START WITH...CONNECT BY PRIOR子句实现递归查询

今天发现在oracle中的select语句可以用START WITH...CONNECT BY PRIOR子句实现递归查询,connect by 是结构化查询中用到的,其基本语法是: select ... from tablename start with cond1 con...

zhengjunbo ⋅ 2013/06/04 ⋅ 0

Oracle递归查询

--本文章可以直接粘贴到PLSQL运行,测试表就自己创建吧 --测试名称:测试oracle递归 --oracle版本:oracle8i --样表:scoalareatest(地区表) --表结构:国家 level(等级) 1 level决定记录...

lovedreamland ⋅ 2012/11/19 ⋅ 1

Oracle中start with...connect by子句的用法

Oracle中start with...connect by子句的用法Oracle中start with…connect by prior子句用法 connect by 是结构化查询中用到的,其基本语法是:select … from tablenamestart with 条件1conn...

什么是程序员 ⋅ 2016/11/11 ⋅ 0

oracle递归查询

今天发现在oracle中的select语句可以用START WITH...CONNECT BY PRIOR子句实现递归查询,connect by 是结构化查询中用到的,其基本语法是: select ... from tablename start with cond1 con...

紫枫咖啡 ⋅ 2014/05/12 ⋅ 0

oracle start with 函数

Oracle中start with…connect by prior子句用法 connect by 是结构化查询中用到的,其基本语法是: select … from tablename start with 条件1 connect by 条件2 where 条件3; 例: select...

yanggaoq ⋅ 2013/01/14 ⋅ 2

java ssh 项目oracle移植到postgresql

原来一使用ssh开发的项目,因实际需要,要从oracle迁移到postgresql。 理想 1.postgresql中创建相关表,把数据从oracle导到postgresql中 2.复制postgresql的jdbc包到项目中 3.配置jdbc参数,...

opal ⋅ 2016/11/27 ⋅ 3

对于oracle进行简单树查询(递归查询)

对于oracle进行简单树查询(递归查询),很早想总结了,发现了一个,转过来 DEPTID PAREDEPTID NAME NUMBER NUMBER CHAR (40 Byte) 部门id 父部门id(所属部门id) 部门名称 通过子节点向根节点追...

晨曦之光 ⋅ 2012/03/09 ⋅ 0

PostgreSQL Oracle 兼容性之 - INDEX SKIP SCAN (递归查询变态优化) 非驱动列索引扫描优化

标签 PostgreSQL , Oracle , index skip scan , 非驱动列条件 , 递归查询 , 子树 背景 对于输入条件在复合索引中为非驱动列的,如何高效的利用索引扫描? 在Oracle中可以使用index skip scan...

德哥 ⋅ 04/18 ⋅ 0

基于Hadoop生态圈的数据仓库实践 —— 进阶技术(七)

七、递归 数据仓库中的关联实体经常表现为一种“父—子”关系。在这种类型的关系中,一个父亲可能有多个孩子,而一个孩子只能属于一个父亲。例如,一个人只能被分配到一个部门,而一个部门可...

wzy0623 ⋅ 2016/07/28 ⋅ 0

基于Hibernate的系统的跨数据库设计问题

使用Hibernate,原先只针对oracle数据库进行开发,系统中使用了很多oracle数据库的特性,现在要求支持mysql,sql server等数据库,但仍然保留Hibernate。 这里有一个初步的想法: 对于简单的...

yangrfa ⋅ 2014/02/13 ⋅ 1

没有更多内容

加载失败,请刷新页面

加载更多

下一页

对于程序员的招聘问题,作为软件人的一些吐槽和建议

作为软件人,找工作有时候似乎挺苦逼的。 说真的,让我去掉前面这句中“似乎”二字吧。就是苦逼!很多人都曾抱怨处在招聘的一方很糟糕——我们没有任何可靠的方式来甄别会写代码并且写得好的...

老道士 ⋅ 34分钟前 ⋅ 0

HDFS原理学习

一、概述 1、 Hadoop整合了众多的文件系统,首先提供了一个高层的文件系统抽象org.apache.hadoop.fs.FileSystem。然后有各个文件系统的实现类。 2、Hadoop是JAVA编写的,不同文件系统之间的交...

cjxcloud ⋅ 38分钟前 ⋅ 0

Linux下MySQL表名不区分大小写的设置方法(抄袭别人的)

Linux下MySQL表名不区分大小写的设置方法 MySQL表名不区分大小写的设置方法 在用centox安装mysql后,把项目的数据库移植了过去,发现一些表的数据查不到,排查了一下问题,最后发现是表名的大...

随风而浮沉 ⋅ 43分钟前 ⋅ 0

ubuntu下安装宋体simsun

sudo cp simsun.ttc /usr/share/fonts cd /usr/share/fonts sudo chmod 644 simsun.ttc 更新字体缓存: 代码: sudo mkfontscale 代码: sudo mkfontdir 代码: sudo fc-cache -fsv 安装chrome扩......

wangxuwei ⋅ 44分钟前 ⋅ 0

利用 ssh 传输文件

Linux 下一般可以用 scp 命令通过 ssh 传送文件: #把服务器上的 /home/user/a.txt 发送到本机的 /var/www/local_dir 目录下scp username@servername:/home/user/a.txt /var/www/local_dir...

大灰狼时间 ⋅ 54分钟前 ⋅ 0

web3j教程:android和java程序员如何使用web3j开发区块链以太坊

如何使用web3j为Java应用或Android App增加以太坊区块链支持,本教程内容即涉及以太坊中的核心概念,例如账户管理包括账户的创建、钱包创建、交易转账,交易与状态、智能合约开发与交互、过滤...

智能合约 ⋅ 今天 ⋅ 0

web3j开发java或android以太坊智能合约快速入门

web3j简介 web3j是一个轻量级、高度模块化、响应式、类型安全的Java和Android类库提供丰富API,用于处理以太坊智能合约及与以太坊网络上的客户端(节点)进行集成。 可以通过它进行以太坊区块链...

笔阁 ⋅ 今天 ⋅ 0

一起读书《深入浅出nodejs》-异步I/O

异步I/O “异步”这个名词其实很早就诞生了,但它大规模流行却是在Web 2.0浪潮中,它伴随着AJAX的第一个A(Asynchronous)席卷了Web。 为什么要异步I/O 关于异步I/O为何在Node里如此重要,这与...

小草先森 ⋅ 今天 ⋅ 0

JVM各种问题

1、如果启动什么都不设,会怎样? 先来看一个命令 [root@localhost bin]# java -XX:+PrintCommandLineFlags -version -XX:InitialHeapSize=29899008 -XX:MaxHeapSize=478384128 -XX:+PrintCo......

算法之名 ⋅ 今天 ⋅ 0

SAS笔记-宏2

宏是一种文本,一般来说其编译是在程序执行之前。 宏变量的创建 %let语句 %let macro_variables = text; %let是常见的宏变量建立方式,其编译就在执行前。如下例中,想要宏变量test等于数据集...

tonorth123 ⋅ 今天 ⋅ 0

没有更多内容

加载失败,请刷新页面

加载更多

下一页

返回顶部
顶部