2010年 08月 12日 的归档
oracle里循环搜索父子关系的键
想象一下,如果有一张oracle里的表,存着的是一个linux系统当前的进程信息,有ID、父ID、进程名之类的字段,如果给定一个进程ID,要查这个进程的所有父进程(包括爷爷进程等)的ID,sql改怎么写?这就要用到 CONNECT BY PRIOR … START WITH 子句了。
下面就是这样的一个例子:
|
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 |
--原先的表大致是这样的: select id, parentid from the_table where id in (14976, 14975); ID PARENTID ---------- ---------- 14975 14657 14975 14658 14975 14992 14975 15047 14976 14975 --要查所有的父进程,这么干: select distinct id from the_table connect by prior parentid = id start with id = 14976; ID ---------- 1 110 127 130 155 163 12930 13812 14656 14657 14658 14949 14950 14951 14975 14976 14992 15047 |