Bonjour,
Je souhaite mettre en place une requête récursive qui me permette de retourner un "chemin", donc remonter une arborescence en partant de l'ID du dernier "fils".
La Structure:
Code SQL : Sélectionner tout - Visualiser dans une fenêtre à part
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27 Create Table PROJECTS( K_PROJECT PRIMARY KEY, name varchar(50) ); Create Table PROJ_PROJ( K_PROJECT integer References PROJECTS(K_PROJECT), K_PROJECT2 integer References PROJECTS(K_PROJECT), CONSTRAINT PK_PROJ_PROJ PRIMARY KEY (K_PROJECT,K_PROJECT2) ); insert into table PROJECTS VALUES (1, 'Roots'), (2, 'Child2'), (3, 'Child3'), (4, 'Child4'), (5, 'Child5'), (6, 'Child6'), (7, 'Child7'); insert into table PROJ_PROJ(K_PROJECT,K_PROJECT2) VALUES (1, 2), (1, 3), (2, 4), (2, 5), (5, 6), (6, 7);
La clé de l'enfant est PROJ_PROJ.K_PROJECT2
Par exemple si je passe 7 je souhaite retrouver 'Roots/Child2/Child5/Child6/Child7'
J'ai essayer en m'aidant de ça mais ma requête ne trouve pas le 'Roots'.
Requête :
Code SQL : Sélectionner tout - Visualiser dans une fenêtre à part
1
2
3
4
5
6
7
8
9
10
11
12
13 WITH tree(data, parentId) as ( Select p.NAME, pp.K_PROJECT from PROJECTS p join PROJ_PROJ pp on pp.K_PROJECT2=p.K_PROJECT where p.K_PROJECT=430 UNION ALL Select p.NAME, pp.K_PROJECT from PROJECTS p join PROJ_PROJ pp on pp.K_PROJECT2=p.K_PROJECT join tree t on t.parentId=pp.K_PROJECT2 ) select * from tree
Le problème c'est que la clé du Roots (ici 1) n'est pas présent dans PROJ_PROJ.K_PROJECT2.
J'ai voulu essayer avec un LEFT JOIN mais j'ai une erreur :
Je n'en suis pas encore à concaténer les name (même sis c'est le but final), j'en suis à simplement retrouver tous les name.La jointure externe n'est pas autorisée dans la partie récursive d'une expression de table commune récursive 'tree'.
De plus elle sera destiné à être utilisé dans une autre requete (et d'où viendra "where p.K_PROJECT={id}"
Merci d'avance!
Partager