使用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進行遞歸查詢進行了簡單的總結,作爲備忘錄吧,希望也可以對大家有所幫助,謝謝!
發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.