2017-08-16 86 views
0

我有一個包含父/子ID的對下面的映射表:MS SQL服務器:查看一個孩子的家長們

parent_id | child_id 
    3  |  5 
    5  |  4 
    4  |  9 
    6  |  7 
    7  |  8 

我需要爲這個表,該表將列出所有家長的視圖一個給定的孩子。使用上面的例子中,所產生的觀點應該是這個樣子:

parent_id | child_id 
    3  |  5 
    3  |  4 
    5  |  4 
    3  |  9 
    5  |  9 
    4  |  9 
    6  |  7 
    6  |  8 
    7  |  8 

的觀點會對每個父母一定的ID,家長越多,越行(直接或間接)一行。人們可以假設這個表中沒有循環。

我不確定如何處理這個問題,因爲我已經研究了遞歸選擇和循環,但我不確定如何將它們合併到視圖中。

回答

0

你可以用遞歸CTE的做到這一點:

with cte as (
     select t.parent_id, t.child_id 
     from t 
     where t.child_id = @child -- not needed if you want all 
     union all 
     select t.parent_id, t.child_id 
     from cte join 
      t 
      on t.child_id = cte.parent_id 
    ) 
select * 
from cte; 
+0

這提供了正確數量的結果,但按照上述例子,比如'9'是在生成的表,但每一次'PARENT_ID目前的3倍'是一樣的 - '4'是它的直接父母。 – mmvsbg