使用SQL進行遞歸查詢

使用SQL進行遞歸查詢
 
在工作當中會經常用到遞歸,比如菜單的展示。一種方法就是從數據庫中取出所有的數據,然後在程序中循環獲取符合條件的數據。另外一種方法就是使用SQL直接讀取符合條件的數據。對於遞歸查詢,T-SQL和PL/SQL進行了不同的處理。

以表Deparment爲例
 
表結構爲:
Id 部門內碼,
DeptCode 部門編碼,
ParentDeptId 上級部門內碼
 
使用T-SQL:
 
with Dep as 
    select Id,DeptCode,DeptName from Department where Id=1 
    union all 
    select d.Id,d.DeptCode,d.DeptName from Dep 
    inner join Department d on dep.Id = d.ParentDeptId 
 
select * from Dep 
簡單解釋一下:with as屬於sql server新特性CTE(Common Table Expression)的關鍵字,用來儲存臨時結果集。常用於代替子查詢。本例中可以理解爲,找出Id=1的記錄後,存放在臨時表Dept中,然後臨時表和Department進行內連接,找出它的子記錄。子記錄和第一條記錄union後作爲Dept新的結果集繼續進行內連接,找出新的子記錄。
 
使用PL/SQL:
 
select Id,DeptCode,DeptName 
from Department   www.2cto.com  
start with Id = 1 
connect by prior Id = ParentDeptId; 
 
start with 表示從哪一行記錄開始遞歸查詢,即根節點 
connect by 表示進行遞歸,後面跟遞歸條件 
prior 表示前一條記錄,表示上一條記錄的Id = 下一條記錄的ParentDeptId 
比如上面的SQL語句就可以理解爲,以Id 爲1的記錄爲根節點,遞歸查詢下一條記錄的ParentDeptId = 前一條記錄的Id
 
以上,對使用SQL進行遞歸查詢進行了簡單的總結,作爲備忘錄吧,希望也可以對大家有所幫助,謝謝!
發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章