From: | Frederic Gaerel <frederic(dot)gaerel(at)chronopost(dot)fr> |
---|---|
To: | pgsql-fr-generale(at)postgresql(dot)org |
Subject: | [SQL] Requête recursive |
Date: | 2014-09-22 11:50:43 |
Message-ID: | CACKqRo_sgKcA_9s4rujif57dKcOO57O9vUd9bB+vcDta=qOxJg@mail.gmail.com |
Views: | Whole Thread | Raw Message | Download mbox | Resend email |
Thread: | |
Lists: | pgsql-fr-generale |
Bonjour à tous.
J'ai une table de sites organisés hiérarchiquement comme suit :
CREATE TABLE site
(
code INTEGER NOT NULL,
nom TEXT NOT NULL,
code_maitre INTEGER -- NULL uniquement pour le site au sommet
)
Chaque site ayant un lien vers son "père" via la colonne code_maitre
Via la requête suivante j'obtiens bien les "aïeux" d'un site (père, grand
père, etc.)
WITH RECURSIVE branches( code, parents) AS (
SELECT code,
ARRAY[]::INTEGER[] AS "array"
FROM site
WHERE code_tracking_maitre IS NULL
UNION ALL
SELECT S.S.code,
CASE
WHEN b.parents @> ARRAY[S.code_maitre] THEN b.parents
ELSE b.parents || ARRAY[S.code_maitre]
END AS "case"
FROM site S,
branches b
WHERE b.code = S.code_maitre
)
SELECT *
FROM branches
Je ne parviens pas à "inverser" ma requête pour obtenir la liste des
"descendants" d'un site (enfants, petits enfants, etc..)
Merci de votre aide
Cordialement.
Frédéric GAËREL
Chef de Projets Transport
Direction des Systèmes d'Information
CHRONOPOST INTERNATIONAL
Tél Fixe : (+33) 01 74 22 82 22
Email: frederic(dot)gaerel(at)chronopost(dot)fr <arnaud(dot)courtois(at)chronopost(dot)fr>
From | Date | Subject | |
---|---|---|---|
Next Message | Frederic Gaerel | 2014-09-22 13:04:33 | Fwd: [SQL] Requête recursive |
Previous Message | Anthony Nowocien | 2014-09-16 20:43:30 | Re: Erreur Postgres |