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

Oracle Discussion :

Aide sur création de requete arborescente


Sujet :

Oracle

  1. #1
    in
    in est déconnecté
    Membre expérimenté Avatar de in
    Profil pro
    Inscrit en
    Avril 2003
    Messages
    1 612
    Détails du profil
    Informations personnelles :
    Localisation : France, Finistère (Bretagne)

    Informations forums :
    Inscription : Avril 2003
    Messages : 1 612
    Points : 1 718
    Points
    1 718
    Par défaut Aide sur création de requete arborescente
    Bonjour,

    voilà je suis bien embété ... je n'arrive pas à créer la requete que je souhaite. Pourtant, ça me parait faisable, voir même simple (c'est ce qui m'énerve le plus ) Je souhaiterais juste avoir un ou deux conseils ...


    Disons que j'ai une table comme ceci :

    ID TYPE PARENT_ID
    --------------------------------
    1 EPS
    2 PRG 1
    3 EPS 2
    4 PRG 3
    5 PU 4
    6 PU 3
    7 PU 2
    --------------------------------

    Je souhaite avoir comme résultat de la requete

    ID TYPE PARENT_ID
    --------------------------------
    5 PU 4
    6 PU 1
    7 PU 1
    --------------------------------


    En fait je veux obtenir tous les éléments de type PU avec leur "plus proche papa" de type PRG. Les niveaux EPS sont quant à eux des niveaux intermédiaires dont je me fiche.

    J'ai donc essayé pas mal de truc à base de connect by et de INNER JOIN mais je m'embrouille.

    en fait récupérer le père d'un PU c'est OK mais je n'arrive pas à créer la requête "générale" qui me renvoie une ligne par PU.

    Du coup 2 tites questions :
    - c'est possible à faire ça quand même ?
    - vaut-il mieux que je récupère les fils PU d'un PRG ou alors le père PRG d'un PU ?

    Merci d'avance

  2. #2
    Membre du Club
    Inscrit en
    Septembre 2006
    Messages
    62
    Détails du profil
    Informations forums :
    Inscription : Septembre 2006
    Messages : 62
    Points : 45
    Points
    45
    Par défaut
    Tu peux etre plus clair dans ton exemple?
    J'ai un peu de mal avec ton explication, et avec ton exemple, un simple

    select * from tatable where type='PU';

    fonctionnerais....


    AH NAN, DSL, J' AI MAL LU !!!

  3. #3
    in
    in est déconnecté
    Membre expérimenté Avatar de in
    Profil pro
    Inscrit en
    Avril 2003
    Messages
    1 612
    Détails du profil
    Informations personnelles :
    Localisation : France, Finistère (Bretagne)

    Informations forums :
    Inscription : Avril 2003
    Messages : 1 612
    Points : 1 718
    Points
    1 718
    Par défaut
    Ben en fait j'utilise cette requete pour récupérer le parent PRG d'un PU donné

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
     select *
     from matable
     where type='PRG'
     start with id = 12136
     connect by prior parent_id = id
    En fait je pense à un truc du style :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
     select *
     from matable
     where type='PRG'
     start with id IN (select id from matable where type='PU')
     connect by prior parent_id = id
    Là j'ai une ligne PRG par PU. Par contre je n'ai pas l'info de quel PU il s'agit. Et je n'ai aucune colonne dans ce résultat avec laquelle faire une jointure ...

    une idée ?

  4. #4
    in
    in est déconnecté
    Membre expérimenté Avatar de in
    Profil pro
    Inscrit en
    Avril 2003
    Messages
    1 612
    Détails du profil
    Informations personnelles :
    Localisation : France, Finistère (Bretagne)

    Informations forums :
    Inscription : Avril 2003
    Messages : 1 612
    Points : 1 718
    Points
    1 718
    Par défaut
    Bon, j'ai finalement réussi à faure cette requete. Par contre elle est vraiment cochonne. J'ai pas regarder le explain plan mais je vois bien qu'elle est optimisée pour ralentir la base

    En fait ma requete est basée sur pas mal d'autojointures. Il y a surement moyen d'améliorer ça. Par contre j'ai pas d'idées et j'ai pas l'expérience pour voir à l'instinct d'où vient le problème.

    Du coup je vous soumet cette requete. Si vous avez des idées ou tout simplement des remarques ... (par contre j'ai la flemme de tout modifier en "matable" "id" ... ). En fait, il y a un niveau en plus -> TASK qui se trouve sous les PU. Je veux récupérer toutes les TASK avec le PU et le PRG. (le PU est renseigné pour une TASK dans la table)

    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
    23
    24
    select   b3.elt_db_id Prog,    -- le parent PRG
    	   b1.pu_db_id Proj,     -- le PU
    	   p.proj_id projOID,     -- identifiant du PU provenant d'une autre table
    	   b2.orig_pu_db_id Origin, -- 1 champ du PU
    	   b1.elt_db_id Act,      -- la TASK
    	   count(tr.taskrsrc_id) nbRA -- le nombre de sous elements de la TASK
    from   bi_wbs b3,   -- la table pour le PRG
    	 bi_wbs b1 JOIN projwbs p ON b1.pu_db_id = p.wbs_id   -- identifiant PU autre table
    	 		   INNER JOIN bi_wbs b2 ON b1.pu_db_id = b2.elt_db_id -- pour le champ origin du PU
    	 		   JOIN taskrsrc tr ON b1.elt_db_id = tr.task_id -- ss elt de task
    where b1.elt_type='TASK' 
    and	  tr.delete_date IS NULL 
    and   p.delete_date IS NULL
    and   b3.elt_db_id = (select elt_db_id 
    					  from bi_wbs b4
    					  where b4.elt_type = 'PRG'
    					  start with b4.elt_db_id = b1.elt_db_id
    					  connect by prior b4.elt_parent_db_id = b4.elt_db_id )   -- le truc pour récupérer le PRG
    group by b3.elt_db_id,
    	  	 b1.pu_db_id, 
    	   	 p.proj_id, 
    		 b2.orig_pu_db_id, 
    	   	 b1.elt_db_id
    order by prog,proj,act

    Comme vous pouvez le voir j'accède 4 fois à la table bi_wbs

Discussions similaires

  1. Aide sur création requete
    Par pas85 dans le forum MS SQL Server
    Réponses: 7
    Dernier message: 13/06/2014, 14h09
  2. Aide sur création d'index
    Par barok dans le forum Requêtes
    Réponses: 1
    Dernier message: 14/05/2007, 14h10
  3. aide sur création de view
    Par ramaro dans le forum Administration
    Réponses: 1
    Dernier message: 21/02/2007, 16h16
  4. [struts] liste dynamique, aide sur création Form
    Par chouchou93 dans le forum Struts 1
    Réponses: 3
    Dernier message: 01/12/2006, 16h45
  5. aide sur création d'un composant
    Par laetus dans le forum C++Builder
    Réponses: 2
    Dernier message: 14/07/2004, 10h45

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