Oracle递归查询start with connect by prior的用法

一、基本语法

connect by递归查询基本语法是:

select 1 from 表格 start with ... connect by prior id = pId

start with:表示以什么为根节点,不加限制可以写1=1,要以id为123的节点为根节点,就写为start with id =123

connect by:connect by是必须的,start with有些情况是可以省略的,或者直接start with 1=1不加限制

prior:prior关键字可以放在等号的前面,也可以放在等号的后面,表示的意义是不一样的,比如 prior id = pid,就表示pid就是这条记录的根节点了

二、业务场景

举个例子,写条SQL:

t_user(用户表),t_unit_info(单位表),意思是以单位编码为"15803"的单位为根节点,查找出其单位及其子单位的用户信息

 select us.user_code, us.user_name
 from t_user us
 where exists (select 1
   from t_unit_info uinfo where
   us.unit_code = uinfo.unit_code
   start with uinfo.unit_code = '15803'
   connect by prior uinfo.unit_code = uinfo.para_unit_code)

然后将prior换一下位置,发现只能查出单位编码为"15803"对应的单位,不能查子级单位

 select us.user_code, us.user_name
 from t_user us
 where exists (select 1
   from t_unit_info uinfo where
   us.unit_code = uinfo.unit_code
   start with uinfo.unit_code = '15803'
   connect by uinfo.unit_code = prior uinfo.para_unit_code)

oracle 递归查询start with connect by prior的用法和知识不仅仅这些,本博客只是简单记录一下我所遇到的

总结

以上就是这篇文章的全部内容了,希望本文的内容对大家的学习或者工作具有一定的参考学习价值,如果有疑问大家可以留言交流,谢谢大家对我们的支持。

(0)

相关推荐

  • Oracle 11GR2的递归WITH子查询方法

    下面给大家详细介绍Oracle 11GR2的递归WITH子查询方法,具体内容如下所示: SQL> with emp_data(ename,empno,mgr,l) as (select ename, empno, mgr, 1 lvl from emp where mgr is null union all select emp.ename, emp.empno, emp.mgr, ed.l+1 from emp, emp_data ed where emp.mgr = ed.empno ) S

  • oracle 使用递归的性能提示测试对比

    当你用start with connect by nocycle prior 进行递归查找数据的时候那么下面两段代码的性能肯定是有明显差别的大家用的时候 请注意了代码可以不看下面 直接看我的总结 //查询某个文件夹文件夹ID=12里面的层次数以及 文件的个数 A:为文件之间的关联关系 上下级关系 B:为文件夹里面的文件 正解: 复制代码 代码如下: select count(0) cou,max(levels)+1 as levels select C.a1,C.a2,C.levels... f

  • 深入sql oracle递归查询

    ☆ 获取数据库所有表名,表的所有列名   select name from sysobjects where xtype='u'   select name from syscolumns where id=(select max(id) from sysobjects where xtype='u' and name='表名') ☆ 递归查询数据Sql语句里的递归查询 SqlServer2005和Oracle 两个版本以前使用Oracle,觉得它的递归查询很好用,就研究了一下SqlServer

  • Oracle通过递归查询父子兄弟节点方法示例

    前言 说到Oracle中的递归查询语法,我觉得有一些数据库基础的童鞋应该都知道,做项目的时候应该也会用到,下面本文就来介绍下关于Oracle通过递归查询父子兄弟节点的相关内容,分享出来供大家参考学习,下面话不多说了,来一起看看详细的介绍吧. 方法如下: 1.查询某节点下所有后代节点(包括各级父节点) // 查询id为101的所有后代节点,包含101在内的各级父节点 select t.* from SYS_ORG t start with id = '101' connect by parent_

  • oracle SQL递归的使用详解

    oracle数据库中如果需要使用SQL递归语句,应该怎么写呢?下面就为您介绍一个oracle中使用SQL递归语句的例子,供您参考.例子: 复制代码 代码如下: pid  id  a   b     a   c       a   e     b   b1     b   b2     c   c1     e   e1     e   e3     d   d1 指定pid=a,选出     a   b     a   c       a   e     b   b1     b   b2  

  • Oracle递归查询start with connect by prior的用法

    一.基本语法 connect by递归查询基本语法是: select 1 from 表格 start with ... connect by prior id = pId start with:表示以什么为根节点,不加限制可以写1=1,要以id为123的节点为根节点,就写为start with id =123 connect by:connect by是必须的,start with有些情况是可以省略的,或者直接start with 1=1不加限制 prior:prior关键字可以放在等号的前面,

  • Oracle递归查询connect by用法

    目录 一.概述 1.层级查询的基本语法: 二.使用 1.基本用法 2.SYS_CONNECT_BY_PATH() 函数 3.CONNECT_BY_ISLEAF 伪列 4.CONNECT_BY_ROOT 字段x -> 找到该节点最顶端节点的字段x 5.10g新特性 采用sibilings排序 三.与row num 生成序列记录 1.简单序列: 2.生成10-14的连续数(10开始,5行数据) 3.生成a-d的四个字母 4.生成2011-01-05至2011-01-10的日期 5.字符串分割,由一行

  • Oracle递归查询简单示例

    目录 1 数据准备 2 start with connect by prior递归查询 2.1 查询所有子节点 2.2 查询所有父节点 2.3 查询指定节点的,根节点 2.4 查询巴中市下行政组织递归路径 3 with递归查询 3.1 with递归子类 3.2 递归父类 补充:实例 总结 1 数据准备 create table area_test( id number(10) not null, parent_id number(10), name varchar2(255) not null

  • Oracle递归查询树形数据实例代码

    目录 概述 1.数据准备 2 start with connect by prior递归查询 2.1 查询所有子节点 2.2 查询所有父节点 2.3 查询指定节点的根节点 2.4 查询下行政组织递归路径 3 with递归查询 3.1 with递归子类 3.2 递归父类 4 MySQL 递归查找树形结构 总结 概述 实际生活有很多树形结构的数据,比如公司分为多个部门,部门下分为多个组,组下分为多个员工:省市县的归属:页面菜单栏等等. 如果想查询某个节点的父节点或者子节点,一般通过表自身连接完成,但

  • [Oracle] 常用工具集之SQL*Loader的用法

    其示意图如下: 控制文件:用于控制数据导入的行为方式的文件(最重要的文件). 参数文件(可选) 数据文件:放置源数据的平面文件 错误文件:在数据加载时,把无法正确加载的数据放入错误文件中(比如数据格式问题.数据类型问题等) 丢弃文件(可选):有些数据,虽然数据格式.数据类型没有问题,但它被逻辑条件过滤掉了(在控制文件中设置),会被放入丢失文件 日志文件:记录SQL*Loader的数据加载过程 直接路径加载 在SQL*Loader里,为了提高性能,一般采用直接路径加载(设置Direct = TRU

  • react-redux中connect的装饰器用法@connect详解

    最近在琢磨react中的一些小技巧,这篇文章记录一下在redux中用装饰器来写connect. 通常我们需要一个reducer和一个action,然后使用connect来包裹你的Component.假设你已经有一个key为main的reducer和一个action.js. 我们的App.js一般都这么写: import React from 'react' import {render} from 'react-dom' import {connect} from 'react-redux' i

  • Oracle SQL树形结构查询

    oracle中的select语句可以用START WITH...CONNECT BY PRIOR子句实现递归查询,connect by 是结构化查询中用到的,其基本语法是: 复制代码 代码如下: select * from tablename start with cond1 connect by cond2 where cond3; 简单说来是将一个树状结构存储在一张表里,比如一个表中存在两个字段: id,parentid那么通过表示每一条记录的parent是谁,就可以形成一个树状结构. 用上

随机推荐