2009-07-27 8 views
0

J'ai une structure arborescente hiérarchique .Comment puis-je obtenir l'arbre de gauche et l'arbre de droite.Besoin d'aide pour une requête?

1 a NULL 
2 b 1 
3 c 1 
4 d 2 
5 e 2 
6 f 3 
7 g 3 
8 h 4 
9 i 4 
10 j 5 
11 k 5 
12 l 6 

Si j'ai l'identifiant d'un à-dire 1 .Comment puis-je obtenir l'arbre de b et c

J'attends l'arbre sous b comme

2 b 
4 d 
5 e 
8 h 
9 i 
10 j 
11 k 

Voici un i suivant modèle de contiguïté seulement je vais. Je ne cherche pas de modèle imbriqué. Ceci peut être une question en double.

+0

Pourriez-vous, s'il vous plaît, essayer de reformuler votre question? Au moins pour moi, cela n'a pas beaucoup de sens ... – fresskoma

+0

s'il vous plaît, clarifiez ce qui est quoi. Si les colonnes sont des champs, donnez-leur un nom pour refléter cela. Aussi, je vois que le premier bloc est une situation de base de données, mais quel est le second bloc? Est-ce ce que vous voulez obtenir? Est-ce autre chose? Essayez également de répéter ce que vous voulez obtenir, éventuellement avec un exemple dans la situation de votre base de données exemple. Tant que je ne sais pas ce que vous demandez, je ne peux pas répondre à votre question. – Jasper

+0

Je suppose que les colonnes sont les suivantes: ID de nœud, clé de nœud et ID de nœud parent. Il semble être une carte d'un b-arbre à une base de données. Je suppose que vous voudrez peut-être charger l'arbre dans une arborescence et utiliser des algorithmes d'arbres ordinaires pour répondre à vos besoins. – dave

Répondre

1

ceci renverrait la structure de l'arbre pour les parents 1

DECLARE @Table TABLE(
     ID INT, 
     Val VARCHAR(MAX), 
     ParentID INT 
) 

INSERT INTO @Table (ID,Val,ParentID) SELECT 1, 'a', NULL 
INSERT INTO @Table (ID,Val,ParentID) SELECT 2, 'b', 1 
INSERT INTO @Table (ID,Val,ParentID) SELECT 3, 'c', 1 
INSERT INTO @Table (ID,Val,ParentID) SELECT 4, 'd', 2 
INSERT INTO @Table (ID,Val,ParentID) SELECT 5, 'e', 2 
INSERT INTO @Table (ID,Val,ParentID) SELECT 6, 'f', 3 
INSERT INTO @Table (ID,Val,ParentID) SELECT 7, 'g', 3 
INSERT INTO @Table (ID,Val,ParentID) SELECT 8, 'h', 4 
INSERT INTO @Table (ID,Val,ParentID) SELECT 9, 'i', 4 
INSERT INTO @Table (ID,Val,ParentID) SELECT 10, 'j', 5 
INSERT INTO @Table (ID,Val,ParentID) SELECT 11, 'k', 5 
INSERT INTO @Table (ID,Val,ParentID) SELECT 12, 'l', 6 

DECLARE @ParentID INT 

SET @ParentID = 1 

;WITH TreeSelect AS(
     SELECT ID, 
       Val 
     FROM @Table 
     WHERE ParentID = @ParentID 
     UNION ALL 
     SELECT t.ID, 
       t.Val 
     FROM @Table t INNER JOIN 
       TreeSelect ts ON t.ParentID = ts.ID 
) 
SELECT * 
FROM TreeSelect 
OPTION (MAXRECURSION 0) 
0

Je pense que ce dont vous avez besoin sont CTE (Common Table Expressions)

se trouve ce type de CTE récursive here, et essayer this pour aide générale pour les CTE, car ils ont tendance à utiliser une syntaxe SQL inférieure à la norme

Questions connexes