[英]Querying Parent-Child relationship in a consecutive way
我正在嘗試編寫一個導入工具,以將數據庫從一種模式轉換為另一種模式。
因此,現在我遇到了一個使用父子關系的表(通過PK ID
FK ParentID
),我想連續選擇所有記錄。
查詢的風險在於,我可能會嘗試導入其父元素尚未導入的子元素。 這將導致記錄集將不被導入,因此應避免使用。
我正在處理的查詢如下:
SELECT * FROM Table a INNER JOIN Table b ON (b.ParentID=a.ID and a.ID= b.ParentID)
不幸的是,這行不通(它沒有為我提供表中的所有記錄),因此我需要一個查詢,該查詢提供表中的所有行(按子元素和父元素排序),我可以循環進行導入。
有人可以指導我嗎?
您正在尋找的是遞歸公用表表達式,可以在此鏈接上找到: http : //technet.microsoft.com/zh-cn/library/ms186243%28v=sql.105%29.aspx
您可以使用它告訴下游ETL應該加載的順序。例如,所有1都排在第一位,第二位在第二位,依此類推。
DECLARE @Table TABLE (
ID INT,
ParentId INT)
INSERT INTO @Table
VALUES
(1, 0),
(2, 1),
(3, 1),
(4, 0),
(5, 4),
(6, 4),
(7, 1),
(8, 7)
--This is the anchor query and selects top level records
;WITH cte_Recursive AS (
SELECT ID, ParentId, 1 [Depth]
FROM @Table
WHERE ParentId = 0
UNION ALL
SELECT T.ID, T.ParentId
,R.Depth + 1 [Depth]
FROM @Table T
INNER JOIN cte_Recursive R ON R.ID = T.ParentId
)
SELECT *
FROM cte_Recursive
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.