樹形結構在實際中應用很多,但在數據庫中一般也是設計為表格,如何讀取,子孫節點,或者是祖先節點?
在Oracle中使用start with connect by PRior
select * from tablename start with cond1
connect by cond2
where cond3;
start with 子句:遍歷起始條件,有個小技巧,如果要查父結點,這里可以用子結點的列,反之亦然。
connect by 子句:連接條件。關鍵詞prior,prior跟父節點列parentid放在一起,就是往父結點方向遍歷;prior跟子結點列subid放在一起,則往葉子結點方向遍歷,
parentid、subid兩列誰放在“=”前都無所謂,關鍵是prior跟誰在一起。
查找指定節點的所有祖先節點
select * from tablename start with id=76 connect by prior parentid=id查找指定節點的所有子孫節點select * from tablename start with id=76 connect by prior id=parentid在SQL Server 中使用CTE遞歸查詢CTE的語法: WITH CTE名稱(字段列表) AS ( 查詢語句 ) 例如: WITH lmenu(name,senior) as ( SELECT name,senior from menu )
查找指定節點的所有子孫節點
WITH lmenu(name,id) as ( /*初始查詢*/ SELECT name,id FROM tablename WHERE id=76 UNION ALL /*遞歸*/ SELECT A.NAME,A.id FROM tablename A,lmenu b /*遞歸條件*/ where a.id = b.parentid) /*遞歸完成后返回數據*/SELECT * from lmenu
新聞熱點
疑難解答