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 :

Sélection de feuilles dans une requête hiérarchique


Sujet :

SQL Oracle

  1. #1
    Membre du Club Avatar de gojira
    Profil pro
    Inscrit en
    Mars 2006
    Messages
    94
    Détails du profil
    Informations personnelles :
    Âge : 48
    Localisation : France

    Informations forums :
    Inscription : Mars 2006
    Messages : 94
    Points : 55
    Points
    55
    Par défaut Sélection de feuilles dans une requête hiérarchique
    Bonjour à tous,

    J'aimerais se cela est possible déterminer en une seule requête SQL, les couples feuille n - feuille p (avec n = dernier niveau de la hiérarchie et p = niveau 2) d'une table hiérachique. Je suis sous Oracle 9i.

    Ma table est définit de la façon suivante
    et j'ai une hiérarchie sur des éléments allant de 1 (root) à n (supérieur à 2 forcément).

    Il me serait facile de le faire viadu PL/SQL en me servant de la fonction sys_connect_by_path... mais le but est de le faire en SQL.

    Vu qu'une hiérachie séparent ces feuilles je ne peux pas faire par exemple:
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    select table1.id, table2.id_papa
    from table1, table2
    where table1.id_papa = table2.id
    si je veux la feuille 4 et 2 je devrais faire:
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    select table1.id, table3.id_papa
    from table1, table2, table3
    where table1.id_papa = table2.id and
    table2.id_papa = table3.id
    du coup me requête est assez statique.

    Je sais que pour récupérer un niveau de hiérarchie n je dois faire
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    select id, id_papa
    from table
    where level=n
    start with id_papa is null
    connect by id_papa = prior id
    Mais dans ce cas quel serait le lien à faire pour obtenir la feuille 2 et la dernière feuille de la hiérarchie?

    Déjà, est-ce que ce moyen existe? Autrement qu'en faisant du PL/SQL et en n'utilisant seulement les fonctions fournis avec la 9i?

    Merci d'avance à tous si vous avez des idées, des pistes ou ne serait-ce qu'une réponse du type "arrête de chercher ce n'est pas possible en SQL"...
    Amicalement
    Gojira
    mon site sur la culture japonaise et le Uechi-ryû: http://www.shinryu.fr

  2. #2
    McM
    McM est déconnecté
    Expert éminent

    Homme Profil pro
    Développeur Oracle
    Inscrit en
    Juillet 2003
    Messages
    4 580
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Bouches du Rhône (Provence Alpes Côte d'Azur)

    Informations professionnelles :
    Activité : Développeur Oracle

    Informations forums :
    Inscription : Juillet 2003
    Messages : 4 580
    Points : 7 740
    Points
    7 740
    Billets dans le blog
    4
    Par défaut
    Il me serait facile de le faire viadu PL/SQL en me servant de la fonction sys_connect_by_path... mais le but est de le faire en SQL.
    En fait ce'st possible en SQL. Je suppose que tu l'utilises dans un environnement qui n'est pas à jour au niveau du moteur sql (comme Forms par exemple).
    More Code : More Bugs. Less Code : Less Bugs
    Mon Blog PL/Sql : Fichier Zip / Image BMP / Lire sqliteDB / QRCode et Images PNG ou BMP

  3. #3
    Membre du Club Avatar de gojira
    Profil pro
    Inscrit en
    Mars 2006
    Messages
    94
    Détails du profil
    Informations personnelles :
    Âge : 48
    Localisation : France

    Informations forums :
    Inscription : Mars 2006
    Messages : 94
    Points : 55
    Points
    55
    Par défaut
    J'utilise SQLplus pour l'exécution des requêtes... Je suis sous Oracle 9i.
    Par contre je ne vois pas comment y arriver en une requête sans passer par des boucles PL/SQL (sélection des feuilles, parcours des feuilles pour déterminer le deuxième niveau de hiérarchie correspondant à chaque feuille et établir les couples feuille terminale-feuille niveau 2).

    Si ça vous parle, avec vous un indice à me proposer? Ca serait vraiment sympathique, car je ne vois pas vraiment comment faire ça en une requête SQL.
    mon site sur la culture japonaise et le Uechi-ryû: http://www.shinryu.fr

  4. #4
    McM
    McM est déconnecté
    Expert éminent

    Homme Profil pro
    Développeur Oracle
    Inscrit en
    Juillet 2003
    Messages
    4 580
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Bouches du Rhône (Provence Alpes Côte d'Azur)

    Informations professionnelles :
    Activité : Développeur Oracle

    Informations forums :
    Inscription : Juillet 2003
    Messages : 4 580
    Points : 7 740
    Points
    7 740
    Billets dans le blog
    4
    Par défaut
    J'avais commencé quelque chose de faux (ça donnait le niveau 2 et le niveau maximum de chaque niveau 2), donc il faut que je recommence.

    Le problème c'est que je n'ai pas le temps actuellement, voici la piste :
    Il faut que tu utilises des fonctions analytiques pour connaitre les remontées de niveau (ça veut dire que c'est une feuille)
    Ensuite faut refaire par dessus une fonction analytique pour savoir s'il existe dans le noeud une remontée de niveau, si oui, alors le noeud est un noeud final à afficher.

    Voila, en gros ça va faire des
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    SELECT FROM (SELECT FROM (...) ) WHERE ..)
    More Code : More Bugs. Less Code : Less Bugs
    Mon Blog PL/Sql : Fichier Zip / Image BMP / Lire sqliteDB / QRCode et Images PNG ou BMP

Discussions similaires

  1. Réponses: 6
    Dernier message: 23/08/2007, 09h49
  2. Réponses: 6
    Dernier message: 27/06/2007, 11h11
  3. champs non accessibles dans une requête sélection
    Par Claire31 dans le forum Requêtes et SQL.
    Réponses: 8
    Dernier message: 03/08/2006, 13h22
  4. Sélection de lignes dans une feuille Excel
    Par lerico dans le forum Macros et VBA Excel
    Réponses: 2
    Dernier message: 27/12/2005, 09h20
  5. Réponses: 9
    Dernier message: 17/10/2005, 17h13

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