Vous n'êtes pas identifié(e).
Bonjour,
J'ai la requete recursive suivante:
WITH recursive enfant(idEnfant,nomEnfant,parent,level) AS
(
SELECT d.id,d.nom,d.parent,0
FROM domaine d where d.parent is null
union ALL
SELECT d.id,d.nom,d.parent,e.level+1
FROM domaine d,enfant e
where d.parent=e.idEnfant
)
SELECT idEnfant,nomEnfant,parent,level FROM enfant;
Elle me retourne une série de domaine:
idenfant nomenfant parent level
DOM21455 DOM1 NULL 0
DOM45123 DOM2 DOM21455 1
DOM12421 DOM3 DOM21455 1
DOM95423 DOM4 DOM21455 1
DOM02354 DOM5 DOM12421 2
DOM75136 DOM6 DOM45123 2
DOM04452 DOM7 DOM45123 2
Je souhaiterai que la requete me retourne les domaines dans l'ordre suivant :
idenfant nomenfant parent level
DOM21455 DOM1 NULL 0
DOM45123 DOM2 DOM21455 1
DOM75136 DOM6 DOM45123 2
DOM04452 DOM7 DOM45123 2
DOM12421 DOM3 DOM21455 1
DOM02354 DOM5 DOM12421 2
DOM95423 DOM4 DOM21455 1
Ma question est la suivante : est il possible de faire cela dans la requête ?
Merci d'avance pour toutes infos.
Chris
Hors ligne
Ce que vous voulez faire est un tri par le parent, non ?
Guillaume.
Hors ligne
Ce que je veux faire c'est récupérer la hiérarchie
Hors ligne
Bonjour,
Merci pour votre réponse.
J'y suis finalement arrivée.
Voici le résultat avec le chemin pour chacun et le nombre d'enfant
WITH RECURSIVE child AS
(
SELECT d.id,d.nom,d.parent, 0 AS level, ARRAY[CAST(id AS VARCHAR)] AS path,x.noeud
FROM domaine d,( select d.parent,count(*) as noeud from domaine d group by d.parent)x
WHERE d.id='DOM87544915'
and x.parent=d.id
UNION ALL
SELECT d.id,d.nom,d.parent,c.level + 1 AS level, path || CAST(d.id AS VARCHAR),x.noeud
FROM child c JOIN domaine d ON d.parent = c.id left join ( select d.parent,count(*) as noeud from domaine d group by d.parent)x on x.parent=d.id
)
SELECT c.id,c.parent,c.nom,level,path,noeud
FROM child c
ORDER BY path
Hors ligne