create table Test(
ParentId int,
ChildId int
)
insert into Test(ParentId, ChildId)
select 1, NULL
union
select 1, 2
union
select 1, 3
union
select 2, NULL
union
select 2, 5
union
select 5, 6
union
select 6, 5
union
select 6, 8
我試圖建立一個結果集的所有父子直接和間接關係的。因此,假設我通過PARENTID = 2的參數,我想結果集爲下面正好返回:
ParentId ChildId
-------------------
2 NULL
2 5
5 6
6 8
1 2
所以基本上這顯示了所有可能的聯繫可以在一個表中找到父ID = 2. 從Parent本身開始,它具有Child Id,然後與Child Id 6有其他關係。此外,Parent Id 2屬於父ID 1,它也應顯示在結果集中。請注意,這種關係可能會擴展到N個等級。我希望你明白我在這裏想達到的目標,如果沒有,請讓我知道,這樣我可以更清楚地解釋。
到目前爲止,我想出了下面的遞歸查詢,但它拋出一個如下所述的錯誤:
DECLARE @ID INT = 2
;WITH MyCTE
AS (
SELECT ParentId
,ChildId
FROM Test
WHERE ParentId = @ID
UNION ALL
SELECT T.ParentId
,Test.ChildId
FROM Test
INNER JOIN MyCTE T ON Test.ParentID = T.ChildId
WHERE Test.ParentID IS NOT NULL
)
SELECT *
FROM MyCTE
Error:
The statement terminated. The maximum recursion 100 has been exhausted before statement completion
我都忍了代碼的SQLFiddle here爲你們來測試和嘗試。
我真的很感激任何人指導和幫助我實現我想要的結果。
您的數據中有循環引用。 5是父對象6,6是父對象5.這使得遞歸循環和......這是你的數據實際上是什麼樣子? –
除了循環引用 - 在結果的最後獲取(父,子)1,2的條件是什麼? –
@MikaelEriksson是的,這就是數據的樣子,因爲在兩個人之間可以存在許多類型的關係。 –