簡體   English   中英

連續查詢親子關系

[英]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.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM