IdentifiantMot de passe
Loading...
Mot de passe oublié ?Je m'inscris ! (gratuit)
Navigation

Inscrivez-vous gratuitement
pour pouvoir participer, suivre les réponses en temps réel, voter pour les messages, poser vos propres questions et recevoir la newsletter

SQL Oracle Discussion :

Aide pour une requête hiérarchique


Sujet :

SQL Oracle

  1. #1
    Nouveau membre du Club
    Inscrit en
    Décembre 2010
    Messages
    39
    Détails du profil
    Informations forums :
    Inscription : Décembre 2010
    Messages : 39
    Points : 31
    Points
    31
    Par défaut Aide pour une requête hiérarchique
    Bonjour à tous,

    J'ai une table sous forme d'arbre (données hiérarchiques).

    Je souhaiterai récupérer une seule branche à partir de l’identifiant d’un feuille.
    Comme indique l’image, j’ai besoins de récupérer les parents de la feuille.
    pour le moment ma requête :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    SELECT     t.ID, t.id_pere
          FROM test_hierarchi t
    START WITH t.id_pere IS NULL
    CONNECT BY t.id_pere = PRIOR t.ID;
    Le problème est que cette requête me retourne toute l'arbre(ce qui est normale ).
    Je souhaite mon résulta sous la forme :
    exemple pour la feuille(11)
    Id | id_pere
    11 | 10
    10 | 9
    9 | 1
    1 | null
    exemple pour la feuille(5)
    Id | id_pere
    5 | 4
    4 | 2
    2 | 1
    1 | null
    Merci pour votre aide,
    Images attachées Images attachées  

  2. #2
    Modérateur

    Profil pro
    dba
    Inscrit en
    Janvier 2010
    Messages
    5 643
    Détails du profil
    Informations personnelles :
    Localisation : France, Rhône (Rhône Alpes)

    Informations professionnelles :
    Activité : dba

    Informations forums :
    Inscription : Janvier 2010
    Messages : 5 643
    Points : 13 092
    Points
    13 092
    Par défaut
    Bonjour,

    ceci doit fonctionner :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
     
    WITH Branche AS (
    	SELECT ID, id_Pere
    	FROM	test_hierarchi 
    	WHERE	ID = 11
     
    	UNION ALL
     
    	SELECT P.ID, P.id_pere
    	FROM	Branche F
    	INNER JOIN	test_hierarchi P
    		ON			P.ID = F.id_pere
    )
    SELECT ID, id_Pere
    FROM Branche

  3. #3
    Nouveau membre du Club
    Inscrit en
    Décembre 2010
    Messages
    39
    Détails du profil
    Informations forums :
    Inscription : Décembre 2010
    Messages : 39
    Points : 31
    Points
    31
    Par défaut
    Bonjour aieeeuuuuu,
    désolé mais ça ne fonctionne pas.
    J'ai le message d'erreur avec la requête
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    WITH Branche AS (
    	SELECT ID, id_Pere
    	FROM	test_hierarchi 
    	WHERE	ID = 11 
    	UNION ALL 
    	SELECT P.ID, P.id_pere
    	FROM	Branche F
    	INNER JOIN	test_hierarchi P
    		ON			P.ID = F.id_pere
    )
    SELECT ID, id_Pere
    FROM Branche;
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    ORA-32031: référence interdite d'un nom d'interrogation dans la clause WITH
    J'ai essayé ça
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    WITH branche AS
         (SELECT ID, id_pere
            FROM test_hierarchi
           WHERE ID = 11)select ID, id_pere from branche
          UNION all
          SELECT p.ID, p.id_pere
            FROM branche f INNER JOIN test_hierarchi p ON p.ID = f.id_pere;
    ça me donne que les deux premières lignes.
    est ce qu'il y a une autre alternative?
    Merci

  4. #4
    Modérateur
    Avatar de al1_24
    Homme Profil pro
    Retraité
    Inscrit en
    Mai 2002
    Messages
    9 080
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 63
    Localisation : France, Val de Marne (Île de France)

    Informations professionnelles :
    Activité : Retraité
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : Mai 2002
    Messages : 9 080
    Points : 30 803
    Points
    30 803
    Par défaut
    As-tu essayé en inversant ta requête ?
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    SELECT  t.ID
        ,   t.id_pere
    FROM    test_hierarchi t
    START WITH  t.ID = 11
    CONNECT BY  t.ID = PRIOR t.id_pere
    ;
    Modérateur Langage SQL
    Règles du forum Langage SQL à lire par tous, N'hésitez pas à consulter les cours SQL
    N'oubliez pas le bouton et pensez aux balises
    [code]
    Si une réponse vous a aidé à résoudre votre problème, n'oubliez pas de voter pour elle en cliquant sur
    Aide-toi et le forum t'aidera : Un problème exposé sans mentionner les tentatives de résolution infructueuses peut laisser supposer que le posteur attend qu'on fasse son travail à sa place... et ne donne pas envie d'y répondre.

  5. #5
    Nouveau membre du Club
    Inscrit en
    Décembre 2010
    Messages
    39
    Détails du profil
    Informations forums :
    Inscription : Décembre 2010
    Messages : 39
    Points : 31
    Points
    31
    Par défaut
    Merci à tous, et particulièrement al1_24
    ça fonctionne très bien .
    c'est ce que je cherche

+ Répondre à la discussion
Cette discussion est résolue.

Discussions similaires

  1. Aide pour une requête et left join
    Par Lolo19 dans le forum Langage SQL
    Réponses: 5
    Dernier message: 26/08/2005, 08h09
  2. J'ai besoin de votre aide pour une requête
    Par ovdz dans le forum Langage SQL
    Réponses: 6
    Dernier message: 20/05/2005, 11h42
  3. Demande d'aide pour une requête
    Par arkzor dans le forum Requêtes
    Réponses: 3
    Dernier message: 28/12/2004, 02h40
  4. Besoin d'aide pour une Requête SQL ...
    Par Kokito dans le forum Requêtes
    Réponses: 2
    Dernier message: 07/07/2004, 11h56
  5. besoin d'aide pour une requête
    Par Damien69 dans le forum Langage SQL
    Réponses: 11
    Dernier message: 31/03/2004, 15h38

Partager

Partager
  • Envoyer la discussion sur Viadeo
  • Envoyer la discussion sur Twitter
  • Envoyer la discussion sur Google
  • Envoyer la discussion sur Facebook
  • Envoyer la discussion sur Digg
  • Envoyer la discussion sur Delicious
  • Envoyer la discussion sur MySpace
  • Envoyer la discussion sur Yahoo