0

大家好!我有一張圖。首先,我知道如何構建簡單的遞歸選擇。我讀了一些關於msdn的信息。用遞歸選擇退回所有的孩子

This is my sample graph
在該圖像可以看到(例如)圖的頂部節點,其被編號爲0,影響節點號1(等(2-> 4),(3-> 4), (4-> 5),(5-> 6),(1-> 5))

任務:對於節點顯示它影響的節點。例如, 1所影響,5和6

結果SQL必須返回是這樣的:

who_acts| on_whom_influence 
0  | 1 
0  | 5 
0  | 6 
1  | 5 
1  | 6 
2  | 4 
2  | 5 
2  | 6 
3  | 4 
3  | 5 
3  | 6 
4  | 5 
4  | 6 
5  | 6 

,我可以開始使用CTE的anchor member開始的數據是:

who_acts| on_whom_influence 
2  | 4 
3  | 4 
4  | 5 
5  | 6 
1  | 5 
0  | 1 

我可以使用SQL語法和遞歸選擇來進行選擇嗎?我該怎麼做?

+0

我不明白,你有什麼期望的最終結果?您能否從樣本數據中顯示您想要的結果,這可能會使其更清晰。 – 2013-05-10 15:49:20

+0

您應該包含您的表格定義和當前錨點查詢。樣本結果是@Joachim的第一個代碼塊。它是節點(who_acts)及其所有子節點(on_whom_influence)的列表。 – 2013-05-10 15:53:36

+0

@JoachimIsaksson,@ EsotericScreenName結果是「結果SQL必須返回類似結果」之後的第一個塊。這是結果。 – NDGO 2013-05-10 15:58:53

回答

2

這聽起來像是一個簡單的CTE。您可以在一個單獨的列沿影響的根傳:

; with Influence as 
     (
     select who_acts 
     ,  on_whom_influence 
     ,  who_acts as root 
     from dbo.YourTable 
     union all 
     select child.who_acts 
     ,  child.on_whom_influence 
     ,  parent.root 
     from Influence parent 
     join dbo.YourTable child 
     on  parent.on_whom_influence = child.who_acts 
     ) 
select root 
,  on_whom_influence 
from Influence 
order by 
     root 
,  on_whom_influence 

Example on SQL Fiddle.

+0

好的,我會正確地讀它。 – NDGO 2013-05-10 16:04:33