在ORACLE 数据库中有一种方法可以实现级联查询
 
select  *                //要查询的字段
from table              //具有子接点ID与父接点ID的表 
start with selfid=id      //给定一个startid(字段名为子接点ID,及开始的ID号)
connect by prior selfid=parentid       //联接条件为子接点等于父接点
 
这个SQL主要用于级联查询,给一个父接点可以查出所有的子接点。及子接点的子接点,一查到底,很实用。
 
例:航班表airline,如何用sql语句查询出从广州出发能到达的所有目的地,允许任意中转。
 
FLIGHTNO ORIGIN  DESTINATION
-------------------------------------------
cz3001  CAN  CSX
cz3002  CAN  SHA
cz3003  CSX  SHA
cz3004  CSX  PEK
cz3005  SHA  XIY
cz3006  SHA  SWA
cz3007  PEK  URC
cz3008  PVC  AMS
cz3009  WUH  PVC
cz3010  WUH  XIY
 
这里根就是CAN,SQL语句如下:

select t.destination from airline t start with origin='CAN' connect by prior destination = origin;
 
查询结果:
DESTINATION
-------------------
CSX  
SHA  
XIY  
SWA  
PEK  
URC  
SHA  
XIY  
SWA 
 
9 rows selected.
 
--------------------------------
 
 
在网上看到下面的例子应该更容易理解些,转载一下:
 
 
数据结构如下:
t1
 t11
     t111
        t1111
 t12
     t121
        t1211
 
db数据字段如下:
task_id             task_name         t.parent_task_id       ***
***                     ***                          ***                               ***
000001            t1                         ***                                 ***
000002            t11                       000001                        ***
000005            t12                       000001                         ***
000003            t111                    000002                         ***
000004            t1111                  000003                         ***
000006            t121                    000005                         ***
000007            t1211                  000006                         ***
***                     ***                       ***                                 ***
查询语句:
select t.task_id ,t.task_name ,t.parent_task_id 
from t_task t 
start with task_id='000001'
connect by prior task_id = parent_task_id;
http://roucheng.cnblogs.com/
结果显示:
task_id                 task_name          t.parent_task_id
000001                t1           
000002                t11                       000001
000003                t111                     000002
000004                t1111                    000003
000005                t12                       000001
000006                t121                     000005
000007                t1211                   000006

strat with 指定层次开始的条件,即是说满足这个条件的行即可以做为层次树的最顶层 
  
connect by prior指层之间的关联条件,即什么样的行是上层行的子行(自连接条件)
 
select level ,id,name,parentid from temptable2 
  connect by prior parentid(属于顶层的列)=id(子层的列)  start with id =1

http://www.cnblogs.com/roucheng/p/5404594.html

Oracle级联查询的更多相关文章

  1. oracle 级联查询 根路径

    级联查询有很多教程示例,但是没有找到求特定子孙到根的路径的例子,折腾了一番总算想出方法了. 现假设我们拥有一个菜单表t_menu,其中只有三个字段:id.name和parent_id.它们是具有父子关 ...

  2. oracle使用connect by进行级联查询 树型菜单

    Oracle使用connect by进行级联查询 树型菜单(转) connect by可以用于级联查询,常用于对具有树状结构的记录查询某一节点的所有子孙节点或所有祖辈节点. 来看一个示例,现假设我们拥 ...

  3. ORACLE 数据库的级联查询 一句sql搞定(部门多级)

    在ORACLE 数据库中有一种方法可以实现级联查询   select  *                //要查询的字段 from table              //具有子接点ID与父接点I ...

  4. Oracle中查询当前数据库中的所有表空间和对应的数据文件语句命令

    Oracle中查询当前数据库中的所有表空间和对应的数据文件语句命令 ------------------------------------------------------------------ ...

  5. Oracle树查询总结

    最近在做公司的项目中遇到一个问题,多级级联导航菜单,虽然只有三级目录,但<li>中嵌套<ul>,数据库表结构如下: CREATE TABLE FLFL ( ID NUMBER ...

  6. Oracle层次查询

    Oracle层次查询的语法如下: 下面根据两道“烧脑”的题具体来体现: 1. 根据时间先后顺序,十二星座的英文名称用逗号串起来为'Aries,Taurus,Gemini,Cancer,Leo,Virg ...

  7. 【SQL】Oracle分页查询的三种方法

    [SQL]Oracle分页查询的三种方法 采用伪列 rownum 查询前10条记录 ? 1 2 3 4 5 6 7 8 9 10 11 [sql] select * from t_user t whe ...

  8. 关于Oracle中查询的数字值的显示格式需要保留小数点后两位(或者三位,及其他位数)

    关于Oracle中查询的数字值的显示格式需要保留小数点后两位(或者三位,及其... 方法一:使用to_char的fm格式,即: to_char(round(data.amount,2),'FM9999 ...

  9. Oracle参数化查询

    Oracle参数化查询默认是根据顺序绑定的 select * from table where name=:p1 and (select id from table2 where name=:p1); ...

随机推荐

  1. bash的循环中无法保存变量

    在bash中,如果循环在一个子shell中运行,那么在循环中对循环外面的变量的更改将在循环退出后不可见.像下面的例子: #!/bin/sh python run.py | while read lin ...

  2. Crystal Reports "Access to report file denied. Another program may be using it."

    I encounter this problem several times, the way to get around this is to give "Everyone or Netw ...

  3. BusyBox

    http://blog.csdn.net/a345017062/article/details/6250619

  4. Winform 数据库连接app.config文件配置 数据库连接字符串

    1.添加配置文件 新建一个winform应用程序,类似webfrom下有个web.config,winform下也有个App.config;不过 App.config不是自动生成的需要手动添加,鼠标右 ...

  5. [AX2012]Claims user

    AX2012可以创建一种account type为claims user的账号,这种账号不需要在AD中事先已创建用户,但是claims账号是无法通过rich client登陆到AX,它的主要应用场景是 ...

  6. 关于android中线性布局的layout_gravity属性

    当 android:orientation="vertical"  时, 只有水平方向的设置才起作用,垂直方向的设置不起作用.即:left,right,center_horizon ...

  7. Android Studio] Gradle项目中添加JNI生成文件(.so文件)

    转:http://blog.csdn.net/qiujuer/article/details/24209457 为了适应潮流使用Android Studio还是有半年多了! 对于从Eclipse迁移项 ...

  8. Jdbc如何从PostgreSql读取海量数据?PostgreSql源代码分析纪录

    前言: 最近做数据同步,需要从PostgreSql获取数据,发现一旦数据比较多,那么读取的速度非常慢,并且内存占用特别多&GC不掉. 代码样例: 为了方便讲解,下面写了事例代码,从b2c_or ...

  9. 关于Interface忽然想到的

    其实Interface,顾名思义,就是2个事物的"界面",interface衔接了2个事物,这两个事物,往往一方比较"多变",而另一方我们又不太希望它相对&qu ...

  10. LintCode-- Remove Linked List Elements

    Remove all elements from a linked list of integers that have valueval. 样例 Given 1->2->3->3- ...