2013-10-01 15 views
0

我有數據表包含:SQL服務器:讓所有的葉子從樹上

|Parent Key| Component Key| 

我需要讓所有的葉子(父鍵)選定的組件鍵。

例如:

| 1 | 2 | 
| 1 | 3 | 
| 2 | 4 | 
| 2 | 5 | 
| 6 | 4 | 
| 7 | 6 | 
| 8 | 11 | 
| 9 | 4 | 
| 10 | 12 | 

用於組分鍵= 4欲接收

| 1 | 
| 7 | 
| 9 | 

如果所選組件密鑰已葉(沒有行,其中組分鍵==選擇的分量鍵)我只想返回選定的組件鍵。

它可以通過選擇只?

如何以最有效的方式做到這一點?

+0

對於component key = 4它應該是'2 | 6 | 9',根據您的要求'我需要獲取選擇Component Key的所有葉子(父鍵)「。 –

+0

No,2和6不是葉子因爲1是父節點2,7是父節點6.我需要頂級節點(葉子)。 – user1736332

回答

0

嘗試類似的東西:

DECLARE @selected INT = 4; 

WITH cte 
AS 
(
    SELECT ParentKey, ComponentKey 
    FROM Table1 
    WHERE ComponentKey = @selected 

    UNION ALL 

    SELECT Table1.ParentKey, Table1.ComponentKey 
    FROM Table1 
    INNER JOIN cte ON Table1.ComponentKey = cte.ParentKey 
) 

SELECT ParentKey FROM cte 
WHERE 
    ParentKey NOT IN (SELECT ComponentKey FROM Table1) 
UNION 
SELECT ParentKey FROM Table1 
WHERE 
    ParentKey = @selected 
    AND ParentKey NOT IN (SELECT ComponentKey FROM Table1) 

替換表1與表名。

相關問題