2008/07/14

[SQL Server 2005]遞迴查詢

在資料表中常見到一種 ID, Parent 的用法, 目的在於想使用遞迴的方式建立起樹狀的資料結構.
例如在程式中進行以下的作業:
while(true)
{
//SELECT ID, Parent, Name FROM Table1 WHERE Parent=@ID
}
透過迴圈, 一次次地到資料庫查詢這個 Node 相關的 Parent/Child 資料.

現在有一種 SQL 的做法,可一次查詢出與該 ID 相關的資料.
例如: (此例是向上搜尋)
--WITH Table1Tree-->Table1Tree是具有ID,Parent,Name這三個欄位的一個暫時使用的表格
WITH Table1Tree (ID,Parent,Name) AS (
  --查詢該Node的資料
  SELECT ID,Parent,Name FROM Table1 WHERE ID=100
  UNION All
  --將主表格與WITH的表格做Join, 並以Parent與ID做為Join的Key
  SELECT a.ID,a.Parent,a.Name
  FROM Table1 a INNER JOIN Table1Tree b on b.Parent=a.ID
)
--從WITH的表格中查詢出與該ID相關的Parent資料
SELECT ID,Parent,Name FROM Table1Tree
詳細的 WITH 使用,可參考 http://technet.microsoft.com/zh-tw/library/ms175972.aspx

沒有留言: