t-sql получение листовых узлов - PullRequest
2 голосов
/ 18 мая 2010

На основании следующей таблицы (для ясности я оставил пробелы между строками)

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 ]

2 голосов
/ 18 мая 2010

Вы хотите найти все листья, которые являются всеми путями, которые не содержатся ни в каких других путях. Вы можете сделать это, проверив для каждого пути, существует ли другой путь, который его содержит, следующим образом:

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 голосов
/ 18 мая 2010

Предложение like может помочь:

select Path
from YourTable
where Path like '%\node3\%'
or Path like '%\node3'
or Path like 'node3\%'
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...