2010-05-18 43 views
2

(我行之間的空間保持爲清楚起見)根據下表的T-SQL讓葉節點

Path 
----------- 
\node1\node2\node3 
\node1\node2\node3\node5 

\node1\node6\node3 

\node1\node4\node3 
\node1\node4\node3\node7 
\node1\node4\node3\node8 
\node1\node4\node3\node9 
\node1\node4\node3\node9\node10 

我想包含葉節點的所有路徑。因此,例如,以下將被視爲葉子節點 的路徑\節點1 \節點4 \節點3

\node1\node4\node3\node7 
\node1\node4\node3\node8 
\node1\node4\node3\node9\node10 

以下將輸出:

Output 
--------------------------- 
\node1\node2\node3\node5 
\node1\node6\node3 
\node1\node4\node3\node7 
\node1\node4\node3\node8 
\node1\node4\node3\node9\node10 

PLS。建議。謝謝。

回答

2

你想找到所有的葉子,裏面全是未包含在任何其他路徑的路徑。是否存在包含它的另一個路徑,您可以通過檢查每一條路徑做到這一點,如下所示:

SELECT Path FROM Table1 T1 
WHERE NOT EXISTS (
    SELECT NULL 
    FROM Table1 T2 
    WHERE T2.Path LIKE T1.Path + '\%' 
) 

結果:

Path 
\node1\node2\node3\node5 
\node1\node6\node3 
\node1\node4\node3\node7 
\node1\node4\node3\node8 
\node1\node4\node3\node9\node10 
+0

完美。非常感謝。 – stackoverflowuser 2010-05-18 19:33:40

0

一個like條款似乎做的伎倆:

select Path 
from YourTable 
where Path like '%\node3\%' 
or Path like '%\node3' 
or Path like 'node3\%' 
+1

只有節點1,可以認爲是理所當然的。剩餘節點可以具有任何其他值。還有一些節點不固定。 – stackoverflowuser 2010-05-18 19:19:58

+0

只要大量數據的高性能不是問題! – 2010-05-18 19:20:13

+0

@stackoverflowuser:'like'%\ node3 \%'照顧node3在任何中間位置。另外兩個是第一個和最後一個位置 – Andomar 2010-05-18 19:22:42