0、前言
我們可能會碰到這種需求:一個表的字段為id,pid(父id);我們需要通過id找到他的所有父節點。
在oracle中提供了start with的遞歸函數操作,可以達到上述的要求
1、語法
SELECT ... FROM 【表名】
WHERE 【條件3】
START WITH 【條件1】
CONNECT BY PRIOR 【條件2】
2、使用
2.1 向上查找(父=子)
2.1.1 需求
找到empno為7369的所有領導。
2.1.2 sql語句
表字段連接關系:mgr為領導編號
select t.*,t.rowid from emp t
start with t.empno = 7369 --從empno為7369的開始查找
connect by prior t.mgr = t.empno; --上一條數據(這里就是empno為7369)的mgr == 當前遍歷這一條數據的empno(那么就會找到empno為7902的用戶)
2.1.3 查詢結果
2.2 向下查找(子=父)
2.2.1 需求
找到empno為7566的所有下屬
2.2.2 sql語句
select t.*,t.rowid from emp t
start with t.empno = 7566
connect by prior t.empno = t.mgr;