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 :

[ORACLE 10G] Calcul du chemin récursif pour toutes les occurrences d'une table


Sujet :

SQL Oracle

Vue hybride

Message précédent Message précédent   Message suivant Message suivant
  1. #1
    Membre chevronné
    Avatar de Manopower
    Inscrit en
    Décembre 2003
    Messages
    516
    Détails du profil
    Informations forums :
    Inscription : Décembre 2003
    Messages : 516
    Par défaut [ORACLE 10G] Calcul du chemin récursif pour toutes les occurrences d'une table
    Bonjour,
    j'ai une table Entite avec une relation récursive :

    Entite
    idEntite
    libelleEntite
    idEntiteParente
    idTypEntite


    • Je sais calculer le chemin récursif pour une entité pour avoir toute sa hiérarchie
    • Je sais retrouver, dans le chemin récursif d'une entité donnée, la prochaine entité de type X avec la requête suivante :


    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    Select (Select libelleEntite from Entite where idEntite = 1) as enfant,
    e.libelleEntite as parentDeType9, level 
    from Entite e start with e.idEntite = 1
    where e.idTypEntite = 9 
    connect by prior e.idEntiteParente = e.identite
    retour :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    'MonEntite1';'ParentDeType9DeMonEntite1';12
    Je n'arrive cependant pas à formuler ma requête pour que celle ci me renvoie en résultat toutes mes entités et à coté tous leurs parentsDeType9 respectifs.
    retour attendu :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
     
    'MonEntite1';'ParentDeType9DeMonEntite1';12
    'MonEntite2';'ParentDeType9DeMonEntite2';4
    'MonEntite3';'ParentDeType9DeMonEntite3';18
    'MonEntite4';'ParentDeType9DeMonEntite4';2
    Auriez vous une idée ?

    PS : Pour ce cas, on considère qu'il y aura toujours une entité de type 9 dans la hiérarchie de chaque entité, sinon on ne renvoie rien.

    Merci d'avance !

  2. #2
    Modérateur
    Avatar de Waldar
    Homme Profil pro
    Sr. Specialist Solutions Architect @Databricks
    Inscrit en
    Septembre 2008
    Messages
    8 454
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 47
    Localisation : France, Val de Marne (Île de France)

    Informations professionnelles :
    Activité : Sr. Specialist Solutions Architect @Databricks
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : Septembre 2008
    Messages : 8 454
    Par défaut
    Il faut fournir un jeu d'essai, on a la structure de la table, ce que vous attendez en sortie mais sans les entrées !

  3. #3
    Membre chevronné
    Avatar de Manopower
    Inscrit en
    Décembre 2003
    Messages
    516
    Détails du profil
    Informations forums :
    Inscription : Décembre 2003
    Messages : 516
    Par défaut
    en effet, un jeu d'essai peut aider

    Je vous passe les 23 millions d'entrées de ma table et vous fait un petit résumé à la main

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    idEntite;libelleEntite;idEntiteParente;idTypEntite
    1;'entité1';2;1
    2;'entité2';3;4
    3;'entité3';4;6
    4;'entité4';null;9
     
    5;'entité5';6;1
    6;'entité6';7;4
    7;'entité7';null;9
    Avec ce jeu d'essai donc, je sais écrire ma requête pour qu'elle me retourne soit :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    'entité1';'entité4';4
    soit
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    'entité5';'entité7';3
    ce que j'aimerais, c'est en une seule requête avoir ce résultat :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    'entité1';'entité4';4
    'entité5';'entité7';3
    merci !

  4. #4
    Modérateur
    Avatar de Waldar
    Homme Profil pro
    Sr. Specialist Solutions Architect @Databricks
    Inscrit en
    Septembre 2008
    Messages
    8 454
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 47
    Localisation : France, Val de Marne (Île de France)

    Informations professionnelles :
    Activité : Sr. Specialist Solutions Architect @Databricks
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : Septembre 2008
    Messages : 8 454
    Par défaut
    Essayez ainsi :
    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
    16
    17
    18
    19
    20
    21
    22
    With MaTable as
    (
    select 1 ide, 'entité1' lbe, 2 idp, 1 idt from dual union all
    select 2    , 'entité2'    , 3    , 4     from dual union all
    select 3    , 'entité3'    , 4    , 6     from dual union all
    select 4    , 'entité4'    , null , 9     from dual union all
    select 5    , 'entité5'    , 6    , 1     from dual union all
    select 6    , 'entité6'    , 7    , 4     from dual union all
    select 7    , 'entité7'    , null , 9     from dual
    )
        select lbe                 as libelle_final,
               connect_by_root lbe as libelle_initial,
               connect_by_root ide as id_initial
          from MaTable
         where connect_by_isleaf = 1
    START with idp is null
           and idt = 9
    CONNECT BY PRIOR ide = idp;
     
    LIBELLE_FINAL	LIBELLE_INITIAL	ID_INITIAL
    entité1		entité4		4
    entité5		entité7		7
    Pas sûr qu'elle fonctionne sur une version antérieure à 11g, quelle est la votre ?

  5. #5
    Membre chevronné
    Avatar de Manopower
    Inscrit en
    Décembre 2003
    Messages
    516
    Détails du profil
    Informations forums :
    Inscription : Décembre 2003
    Messages : 516
    Par défaut
    Bonjour Waldar,
    je travaille en Oracle 10G et ta requête fonctionne.

    Tu boucles du haut de la hiérarchie vers le bas, c'est intéressant car j'avais toujours essayé dans l'autre sens.

    appliquée à mes données réelles, ta solution fonctionne parfaitement,

    merci beaucoup !

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

Discussions similaires

  1. Sub valable pour toutes les forms d'une application
    Par serana71 dans le forum VB 6 et antérieur
    Réponses: 3
    Dernier message: 27/05/2010, 15h49
  2. [XL-2007] Un formule math pour toutes les cellules d'une colone
    Par mentat dans le forum Macros et VBA Excel
    Réponses: 9
    Dernier message: 09/01/2010, 16h29
  3. Réponses: 3
    Dernier message: 28/04/2009, 00h42
  4. Réponses: 2
    Dernier message: 20/02/2008, 18h08
  5. Réponses: 6
    Dernier message: 01/08/2006, 18h12

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