2010-05-18 4 views
2

D'après le tableau ci-dessous (j'ai gardé des espaces entre les lignes pour plus de clarté)t-sql obtenir nœuds feuilles

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 

Je veux obtenir tous les chemins contenant noeud feuille. Ainsi, par exemple, ci-après seront considérés comme des noeuds feuilles pour le chemin \ node1 \ node4 \ node3

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

Ce qui suit est la sortie:

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

Pls. suggérer. Merci.

Répondre

2

Vous voulez trouver toutes les feuilles, qui sont tous les chemins qui ne sont pas contenus dans d'autres chemins. Vous pouvez le faire en vérifiant pour chaque chemin s'il y a un autre chemin qui le contient, comme suit:

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

Résultats:

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

Parfait. Merci beaucoup. – stackoverflowuser

0

Une clause like semble faire l'affaire:

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

ne node1 peut être pris pour acquis. Les nœuds restants peuvent avoir n'importe quelle autre valeur. De plus, le nombre de nœuds n'est pas fixé. – stackoverflowuser

+0

Tant qu'une haute performance sur une grande quantité de données n'est pas un problème! –

+0

@stackoverflowuser: 'Comme '% \ node3 \%' prend en charge node3 dans n'importe quelle position du milieu. Les deux autres sont pour la première et la dernière position – Andomar

Questions connexes