t-sql获取叶子节点

时间:2010-05-18 19:11:21

标签: sql sql-server sql-server-2005 tsql

基于下表(为清晰起见,我在行之间保留了空格)

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

我想获取包含叶节点的所有路径。因此,例如,以下将被视为叶节点 for path \ node1 \ node4 \ node3

\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 个答案:

答案 0 :(得分: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

答案 1 :(得分:0)

like子句似乎可以解决问题:

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