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

Langage SQL Discussion :

[Oracle]Problème de jointure externe


Sujet :

Langage SQL

  1. #1
    Membre habitué
    Développeur informatique
    Inscrit en
    Juin 2004
    Messages
    422
    Détails du profil
    Informations professionnelles :
    Activité : Développeur informatique

    Informations forums :
    Inscription : Juin 2004
    Messages : 422
    Points : 174
    Points
    174
    Par défaut [Oracle]Problème de jointure externe
    Une question débutant et pourtant j'ai parcouru la doc.
    J'ai cet exemple cet simple :
    Client, Commande, Détail Commande
    Je veux tous les clients, seulement les commandes correspondant aux clients ( pas toujours existantes ), et seulement le détail des commandes correspondant aux commandes ( pas toujours existant )
    Je veux passer par des jointures Where sans passer par une vue ( parceque je ne suis pas à l'aise sur les left outer join... et ma requête finale comporte un grand nombre de table ), je sais qu'on peut le faire, mais je n'y arrive pas, j'ai un message d'erreur sur la deuxième jointure. Apparamment, le problème est que la troisième table liée à la deuxième est facultative, et que la deuxième table l'est également.

  2. #2
    Membre éclairé Avatar de Z3phur
    Homme Profil pro
    Administrateur de base de données
    Inscrit en
    Décembre 2007
    Messages
    680
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 49
    Localisation : France, Val de Marne (Île de France)

    Informations professionnelles :
    Activité : Administrateur de base de données
    Secteur : Industrie

    Informations forums :
    Inscription : Décembre 2007
    Messages : 680
    Points : 807
    Points
    807
    Par défaut
    peux tu nous mettre ta requête pour que l'on t'aide à l'améliorer.

  3. #3
    Membre habitué
    Développeur informatique
    Inscrit en
    Juin 2004
    Messages
    422
    Détails du profil
    Informations professionnelles :
    Activité : Développeur informatique

    Informations forums :
    Inscription : Juin 2004
    Messages : 422
    Points : 174
    Points
    174
    Par défaut
    Voici mon exemple simplifié ( que j'ai un peu modifié depuis le premier post ) :

    Dans cet exemple, les lignes de factures sont rattachées à des commandes ( mais pas forcément, ou des numéros de commandes erronnés ), les lignes de de factures sont liées au premier identifiant de la table divers ( mais pas forcément, ou avec des numéros érronnés), et la table commande est liés au second identifiant de la table divers (meme infos que précédemment)
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
     
    SELECT * FROM
    facture_ligne fl, lignes de facture
    commande c, --commandes
    divers d --infos divers avec deux identifiants
    WHERE  
    (fl.numcommande=c.idcommande(+)) 
    --toutes les lignes de facture et seulement les infos sur les commandes correspondantes
    and (fl.numdivers1=d.iddivers1(+))
    --lien avec le premier identifiant de la table divers
    and (c.numdivers2=d.iddivers2(+))
    --liens avec le second lien de la table divers. Je  fais le lien avec la table divers grâce à mes deux jointures précédentes

  4. #4
    Xo
    Xo est déconnecté
    Expert confirmé
    Avatar de Xo
    Inscrit en
    Janvier 2005
    Messages
    2 701
    Détails du profil
    Informations personnelles :
    Âge : 51

    Informations forums :
    Inscription : Janvier 2005
    Messages : 2 701
    Points : 4 238
    Points
    4 238
    Par défaut
    Salut,

    Je veux bien t'aider un peu, mais j'ai qq questions :
    1/ est-ce que ta demande est toujours d'actualité ?
    2/ pourquoi ta table divers a 2 identifiants ?
    3/ tu souhaites bien partir de tes lignes de facture pour :
    - récupérer les infos d'un éventuel client (à partir de numdivers1) si renseigné,
    - récupérer la commande liée à ta ligne de facture si il y en a une (Il ne peut y en avoir plusieurs selon tes cardinalités),
    - récupérer de la commande les infos d'un éventuel client (à partir de numdivers2) si renseigné,

    Merci

  5. #5
    Modérateur

    Avatar de CinePhil
    Homme Profil pro
    Ingénieur d'études en informatique
    Inscrit en
    Août 2006
    Messages
    16 801
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 61
    Localisation : France, Haute Garonne (Midi Pyrénées)

    Informations professionnelles :
    Activité : Ingénieur d'études en informatique
    Secteur : Enseignement

    Informations forums :
    Inscription : Août 2006
    Messages : 16 801
    Points : 34 063
    Points
    34 063
    Billets dans le blog
    14
    Par défaut
    Citation Envoyé par devdev Voir le message
    Je veux passer par des jointures Where sans passer par une vue ( parceque je ne suis pas à l'aise sur les left outer join...
    C'est pourtant pas compliqué à écrire les JOIN !
    La requête est ensuite plus facile à lire parce qu'elle sépare bien la partie jointures de la partie restriction.
    Elle est aussi plus facile à débugger, surtout justement s'il y a un grand nombre de tables qui entrent en jeu.

    J'ai cet exemple cet simple :
    Client, Commande, Détail Commande
    Ensuite tu nous mets un projet de requête avec des factures ! Faudrait savoir !
    Ceci dit le principe est le même.
    Mais comme Xo, je me demande bien ce que c'est que cette table Divers avec deux identifiants !

    En partant de l'exemple de départ sur la commande :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    SELECT cl.*, co.*, dc.*
    FROM Client cl
    LEFT OUTER JOIN Commande co ON c.Cl_Id = co.Co_IdClient
       LEFT OUTER JOIN DetailCommande dc ON co.Co_Id = dc.Dc_IdCommande

Discussions similaires

  1. Réponses: 5
    Dernier message: 30/03/2009, 10h04
  2. [ORACLE] Problème de jointure
    Par david71 dans le forum Langage SQL
    Réponses: 2
    Dernier message: 09/08/2007, 12h39
  3. Réponses: 24
    Dernier message: 24/07/2007, 17h48
  4. Problème de jointure externe
    Par Loko dans le forum Langage SQL
    Réponses: 15
    Dernier message: 24/07/2007, 12h04
  5. Problème de Jointure externe
    Par major2 dans le forum Requêtes
    Réponses: 2
    Dernier message: 11/07/2007, 17h58

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