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 :
La jointure externe n'est pas autorisée dans la partie récursive d'une expression de table commune récursive 'tree'.
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.
De plus elle sera destiné à être utilisé dans une autre requete (et d'où viendra "where p.K_PROJECT={id}"

Merci d'avance!