[SQL] Requête recursive

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>

Responses

Browse pgsql-fr-generale by date

  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