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 :

[Oracle] Jointures sur 3 tables -> probleme


Sujet :

Oracle

  1. #1
    Membre confirmé
    Profil pro
    Inscrit en
    Mars 2006
    Messages
    108
    Détails du profil
    Informations personnelles :
    Localisation : Belgique

    Informations forums :
    Inscription : Mars 2006
    Messages : 108
    Par défaut [Oracle] Jointures sur 3 tables -> probleme
    Bonjour!

    Je vais essayé d'expliquer mon problème le plus clairement possible:

    Il concerne 3 tables:
    • certificats
    • reference
    • produit_certificat

    (d'autres tables interviennent également dans la requete mais pas dans le join).

    En gros je veux afficher tous les produits qui se trouve dans la table "produit_certificat" (qui est une relation entre une table de produit et la table de certificat), chaque row accompagné de la reference (de la table reference) concernant ce produit pour l'agence du certificat (qui lui est associé dans produit_certificat).

    Certificats:
    - certif_id
    - agence_id
    - ...

    Produit_certif:
    - prod_id
    - certif_id
    - ...

    Reference:
    - prod_id
    - agence_id
    - reference

    Un produit sera donc affiché en relation avec un certificat lui meme associé a une agence, et la relation entre le produit et cette agence nous renvoit (ou non) un reference code. Le fait est qu'il n'existe pas forcement de reference code pour un produit-agence donné. Mais dans ce cas je veux juste que la requete me renvoit 'null' pour la reference mais me renvoit correctement les autres informations (qu'il n'oublie pas ce row).

    Ce que je pensais devoir faire était un outer join sur agence_id ( de reference) et sur prod_id de reference aussi. Mais d'apres ce que je vois on ne peut pas faire 2 join sur une meme table... De plus je travaille avec oracle 9.x et les syntaxe sont de la forme (+) pour les jointures.

    SELECT * from certificats c, reference r, produits_certificat p
    WHERE
    p.certif_id = c.certif_id AND
    r.agency_id = c.agency_id AND -> n'existe pas forcement
    r.prod_id = p.prod_id -> n'existe pas non plus forcement

    Avant je n'avais pas besoin de l'agence dont je faisais simplement r.prod_id (+) = p.prod_id et ça fonctionnait nikel. Mais maintenant que l'agence entre également en compte je ne sais pas comment faire..

    J'èspere que vous allez pouvoir m'aider.
    Merci d'avance!

  2. #2
    Expert confirmé
    Avatar de Swoög
    Profil pro
    Inscrit en
    Janvier 2003
    Messages
    6 045
    Détails du profil
    Informations personnelles :
    Âge : 37
    Localisation : France

    Informations forums :
    Inscription : Janvier 2003
    Messages : 6 045
    Par défaut
    Je pense qu'il te faudrait te tourner vers des jointures un peu plus précises

    Lis le tuto de SQLpro sur les jointures (tu trouveras un lien sur mon site), il devrait t'apporter les infos nécessaires, s'il y a encore des points qui te parraissent encore obscure, n'hésite par à revenir poster
    Rédacteur "éclectique" (XML, Cours PHP, Cours JavaScript, IRC, Web...)
    Les Règles du Forum - Mon Site Web sur DVP.com (Développement Web, PHP, (X)HTML/CSS, SQL, XML, IRC)
    je ne répondrai à aucune question technique via MP, MSN ou Skype : les Forums sont là pour ça !!! Merci de me demander avant de m'ajouter à vos contacts sinon je bloque !
    pensez à la balise [ code ] (bouton #) et au tag :resolu: (en bas)

  3. #3
    Membre confirmé
    Profil pro
    Inscrit en
    Mars 2006
    Messages
    108
    Détails du profil
    Informations personnelles :
    Localisation : Belgique

    Informations forums :
    Inscription : Mars 2006
    Messages : 108
    Par défaut
    qu'entends tu par une jointure plus précise??

  4. #4
    Membre confirmé
    Profil pro
    Inscrit en
    Mars 2006
    Messages
    108
    Détails du profil
    Informations personnelles :
    Localisation : Belgique

    Informations forums :
    Inscription : Mars 2006
    Messages : 108
    Par défaut
    Enfait j'ai déja lu ce tutorial et malgres le fait qu'il soit super bien fait et explique pas mal de choses je n'ai pas trouvé la solution a mon problème...

  5. #5
    Expert confirmé
    Avatar de Swoög
    Profil pro
    Inscrit en
    Janvier 2003
    Messages
    6 045
    Détails du profil
    Informations personnelles :
    Âge : 37
    Localisation : France

    Informations forums :
    Inscription : Janvier 2003
    Messages : 6 045
    Par défaut
    il faudrait que tu vois quelle sont les jointures qui correspondent le mieux à ton cas... INNER ou [RIGHT|LEFT|FULL] OUTER par exemple...
    Rédacteur "éclectique" (XML, Cours PHP, Cours JavaScript, IRC, Web...)
    Les Règles du Forum - Mon Site Web sur DVP.com (Développement Web, PHP, (X)HTML/CSS, SQL, XML, IRC)
    je ne répondrai à aucune question technique via MP, MSN ou Skype : les Forums sont là pour ça !!! Merci de me demander avant de m'ajouter à vos contacts sinon je bloque !
    pensez à la balise [ code ] (bouton #) et au tag :resolu: (en bas)

  6. #6
    Membre confirmé
    Profil pro
    Inscrit en
    Mars 2006
    Messages
    108
    Détails du profil
    Informations personnelles :
    Localisation : Belgique

    Informations forums :
    Inscription : Mars 2006
    Messages : 108
    Par défaut
    Hey bien moi je pensais a une outer join mais le probleme est qu'il m'en faut 2 sur une meme table ce qui n'est pas permit

  7. #7
    Membre confirmé
    Inscrit en
    Février 2005
    Messages
    31
    Détails du profil
    Informations forums :
    Inscription : Février 2005
    Messages : 31
    Par défaut
    Tu peux passer aussi par un select inclue dans ton select. regarde dans la FAQ "les sous requetes"

  8. #8
    Membre confirmé
    Profil pro
    Inscrit en
    Mars 2006
    Messages
    108
    Détails du profil
    Informations personnelles :
    Localisation : Belgique

    Informations forums :
    Inscription : Mars 2006
    Messages : 108
    Par défaut
    je ne vois pas en quoi un sous select va pouvoir résoudre mon problème Tu sais etre plus précis? :s

  9. #9
    Membre confirmé
    Profil pro
    Inscrit en
    Mars 2006
    Messages
    108
    Détails du profil
    Informations personnelles :
    Localisation : Belgique

    Informations forums :
    Inscription : Mars 2006
    Messages : 108
    Par défaut
    Je calle dessus depuis 2h maintenant, et je pense que la solution se trouve dans les jointures. J'en ai trop marre j'ai vraiement besoin d'aide

  10. #10
    Modérateur
    Avatar de al1_24
    Homme Profil pro
    Retraité
    Inscrit en
    Mai 2002
    Messages
    9 134
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 64
    Localisation : France, Val de Marne (Île de France)

    Informations professionnelles :
    Activité : Retraité
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : Mai 2002
    Messages : 9 134
    Par défaut
    Quelque chose comme ça ?
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    SELECT   * 
    FROM     certificats AS c
       INNER JOIN
             produits_certificat  AS p
          ON p.certif_id = c.certif_id
       LEFT OUTER JOIN
             reference   AS r
          ON r.prod_id = p.prod_id
    WHERE    c.agency_id = COALESCE(r.agency_id,  c.agency_id)
    ;
    Modérateur Langage SQL
    Règles du forum Langage SQL à lire par tous, N'hésitez pas à consulter les cours SQL
    N'oubliez pas le bouton et pensez aux balises
    [code]
    Si une réponse vous a aidé à résoudre votre problème, n'oubliez pas de voter pour elle en cliquant sur
    Aide-toi et le forum t'aidera : Un problème exposé sans mentionner les tentatives de résolution infructueuses peut laisser supposer que le posteur attend qu'on fasse son travail à sa place... et ne donne pas envie d'y répondre.

  11. #11
    Membre confirmé
    Profil pro
    Inscrit en
    Mars 2006
    Messages
    108
    Détails du profil
    Informations personnelles :
    Localisation : Belgique

    Informations forums :
    Inscription : Mars 2006
    Messages : 108
    Par défaut
    MAgnifique ça a l'air de fonctionner!!! Faudrait que je lise un peu de doc sur COALESCE pcq je ne connaissais pas du tout cette fonction.
    Merci encore!

  12. #12
    Modérateur
    Avatar de al1_24
    Homme Profil pro
    Retraité
    Inscrit en
    Mai 2002
    Messages
    9 134
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 64
    Localisation : France, Val de Marne (Île de France)

    Informations professionnelles :
    Activité : Retraité
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : Mai 2002
    Messages : 9 134
    Par défaut
    Citation Envoyé par lem01
    Faudrait que je lise un peu de doc sur COALESCE pcq je ne connaissais pas du tout cette fonction.
    COALESCE est la version Standard SQL de NVL dans Oracle.

    Je t'encourage à utiliser une syntaxe et des fonctions du Standard SQL de préférence à leur version Oracle, pour des raisons à la fois de portabilité et de lisibilité (en particulier sur les jointures).
    Modérateur Langage SQL
    Règles du forum Langage SQL à lire par tous, N'hésitez pas à consulter les cours SQL
    N'oubliez pas le bouton et pensez aux balises
    [code]
    Si une réponse vous a aidé à résoudre votre problème, n'oubliez pas de voter pour elle en cliquant sur
    Aide-toi et le forum t'aidera : Un problème exposé sans mentionner les tentatives de résolution infructueuses peut laisser supposer que le posteur attend qu'on fasse son travail à sa place... et ne donne pas envie d'y répondre.

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

Discussions similaires

  1. probleme avec jointure sur meme table
    Par looping dans le forum Langage SQL
    Réponses: 3
    Dernier message: 08/03/2010, 12h18
  2. [MySQL] Jointure sur une table déjà jointe
    Par genova dans le forum Requêtes
    Réponses: 3
    Dernier message: 18/10/2005, 23h54
  3. Oracle 9iR2 sur Fedora Core 3 PROBLEME de runInstaller
    Par greatmaster1971 dans le forum Oracle
    Réponses: 13
    Dernier message: 29/12/2004, 19h34
  4. jointure sur TROIS tables
    Par caribou_belle dans le forum Langage SQL
    Réponses: 8
    Dernier message: 01/03/2004, 11h20
  5. Jointure sur 2 tables de bases différentes
    Par Celina dans le forum Langage SQL
    Réponses: 10
    Dernier message: 10/11/2003, 11h56

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