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 :

simplification de requête


Sujet :

Oracle

Vue hybride

Message précédent Message précédent   Message suivant Message suivant
  1. #1
    Membre éprouvé

    Profil pro
    Inscrit en
    Septembre 2003
    Messages
    87
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Septembre 2003
    Messages : 87
    Par défaut simplification de requête
    bonjour,

    je souhaite simplifier la requête suivante grâce à une jointure externe (utilisation du (+) ). J'ai beaucoup de mal à utiliser cet opérateur.

    voici 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
    13
    14
    15
    16
    17
    18
    19
    20
    21
    22
    23
    24
    25
    26
    27
    select L.NUM_TOUR				, 
           L.NUM_LIG_TOUR			, 
           C.EMP			   EMP, 
           C.NUM_CONT		    NUM_CONT,
           C.NUM_ART		     NUM_ART, 
           C.NUM_LOT		     NUM_LOT, 
           C.DLUO			  DLUO
      from LIG_TOUR L, CONTENANT C 
     where L.NUM_LIG_TOUR = C.NUM_LIG_TOUR_INV
       and L.TYP_TOUR         = 'INV'
       and L.TYP_REAL         = 'PAPI'
       and L.STYP_TOUR	  = 'ACON'
       and L.ETAT_LIG_TOUR    = 'LANC'
       and not exists (select null
    	               from CR_STOCK CR
                        where CR.NUM_TOUR = L.NUM_TOUR
                          and CR.NUM_LIG_TOUR = L.NUM_LIG_TOUR
    			              and CR.EMP = C.EMP
    		                 and CR.NUM_CONT = C.NUM_CONT
    			             and CR.NUM_ORDRE_PREP = to_char((select max(to_number(CR2.NUM_ORDRE_PREP,'9'))
    								                             from CR_STOCK CR2
    							                                where CR2.NUM_TOUR = L.NUM_TOUR
    								                             and CR2.NUM_LIG_TOUR = L.NUM_LIG_TOUR
    								                             and CR2.EMP = C.EMP
    								                             and CR2.NUM_CONT = C.NUM_CONT
    							                           ))
                          and CR.ETAT_CR_STOCK = 'TERM');
    merci d'avance pour vos propositions

  2. #2
    Membre éclairé

    Inscrit en
    Septembre 2003
    Messages
    425
    Détails du profil
    Informations forums :
    Inscription : Septembre 2003
    Messages : 425
    Par défaut
    Franchement tu devrais fournir un exemple en prenant le temps de tout nous préparer
    genre :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
     
    create table LIG_TOUR ...
    insert into LIG_TOUR values(...
    Avec toutes les tables,les jointures, des occcurences ..
    donne nous ensuite le résultat que tu souhaite avoir.

    Sinon c'est impossible de répondre à ta question

  3. #3
    cdu
    cdu est déconnecté
    Membre expérimenté
    Profil pro
    Inscrit en
    Août 2004
    Messages
    196
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Août 2004
    Messages : 196
    Par défaut
    c'est vrai que de but en blanc on ne comprend pas grand chose dans ta requete....
    par contre à partir d'oracle 9 n'utilise plus des (+)= pour les jointures externes mais les "left outer join ... on"

  4. #4
    Membre éprouvé

    Profil pro
    Inscrit en
    Septembre 2003
    Messages
    87
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Septembre 2003
    Messages : 87
    Par défaut
    voici la solution que j'avais trouvé depuis un moment mais je n'avais pas eu le temps de la donner.

    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
     
    select L.NUM_TOUR    , 
           L.NUM_LIG_TOUR   , 
           C.EMP      EMP, 
           C.NUM_CONT      NUM_CONT,
           C.NUM_ART       NUM_ART, 
           C.NUM_LOT       NUM_LOT, 
           C.DLUO     DLUO,
      nvl(to_number(CR.NUM_ORDRE_PREP)+1, 1) COMPTAGE
      from LIG_TOUR L, CONTENANT C, CR_STOCK CR
     where L.NUM_LIG_TOUR = C.NUM_LIG_TOUR_INV
       and L.TYP_TOUR         = 'INV'
       and L.TYP_REAL         = 'PAPI'
       and L.STYP_TOUR   = 'ACON'
       and L.ETAT_LIG_TOUR    = 'LANC'
       and CR.NUM_LIG_TOUR (+)= C.NUM_LIG_TOUR_INV
       and CR.EMP          (+)= C.EMP
       and CR.NUM_CONT     (+)= C.NUM_CONT
       and ( CR.ETAT_CR_STOCK = 'ENCO' or
       (CR.ETAT_CR_STOCK is null and CR.NUM_CR_STOCK is null)
      )
     order by 1, 2, 3, 4, 5;

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

Discussions similaires

  1. [10g] Simplification de requête
    Par alexis trotta dans le forum SQL
    Réponses: 4
    Dernier message: 24/10/2013, 16h34
  2. Simplification de requête
    Par Ludix_ dans le forum Langage SQL
    Réponses: 12
    Dernier message: 13/04/2012, 14h26
  3. Simplification de requêtes SQL
    Par XGuarden dans le forum VB.NET
    Réponses: 8
    Dernier message: 30/12/2010, 11h31
  4. Simplification de requête
    Par Louis-Guillaume Morand dans le forum SQL
    Réponses: 21
    Dernier message: 03/03/2008, 12h26
  5. [Access] simplification de requètes.
    Par pmboutteau dans le forum Langage SQL
    Réponses: 14
    Dernier message: 02/02/2006, 09h04

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