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 :

Jointure sur plusieurs tables


Sujet :

Oracle

  1. #1
    Membre actif
    Profil pro
    Inscrit en
    Novembre 2005
    Messages
    551
    Détails du profil
    Informations personnelles :
    Localisation : Suisse

    Informations forums :
    Inscription : Novembre 2005
    Messages : 551
    Points : 260
    Points
    260
    Par défaut Jointure sur plusieurs tables
    Bonjour,

    Je faisais les jointures à l'anciennes, donc sans les inner join et voilà que je me modernise, je suis un peu perdue

    voici ma 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
    select p.num_Produit,p.des_prd,
      b.des_bat,e.des_etg,pcarac.des_carw,
      dep.des_dp,dir.des_dr,div.des_div,div.adrs_div,
      resp.ode_usr
    from produit p
    inner join batiment b
    on p.code_bat = b.code_bat
    inner join etage e
    on p.code_etg = e.code_etg
    left outer join prod_carac pCarac
    on (p.cod_prd = pCarac.code_prd and pCarac.cod_cw = 68)
    inner join departement dep
    on p.code_dp = dep.code_dp
    inner join direction dir
    on p.code_dr = dir.code_dr
    inner join division div
    on p.code_div = div.code_div
    inner join prd_resp resp
    on p.cod_prd = resp.cod_prd
    inner join categorie cat
    on (p.code_ctg = cat.code_ctg and cat.code_cla = 1)
    sauf qu j'aimerais en plus ramener des infos de ma table prd_resp(en rouge dans le code)comme le nom et le prénom donc je dois faire encore une jointure sur ma table user :

    prd_resp.code_usr = user.code_usr

    mais je ne sais pas commet l'inclure dans ma requête.

    J'ai encore une question concernant ce que j'ai mis en évidence en bleu :

    si le p.cod_prd = pCarac.code_prd and pCarac.cod_cw = 68 ne ramène rien et que la condition ne donne rien, la ligne sera quand même ramenée dans mon résultat de la requête?

    Merci

    Nath

  2. #2
    Membre chevronné
    Homme Profil pro
    Chef de projet MOA
    Inscrit en
    Février 2012
    Messages
    652
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Morbihan (Bretagne)

    Informations professionnelles :
    Activité : Chef de projet MOA
    Secteur : Distribution

    Informations forums :
    Inscription : Février 2012
    Messages : 652
    Points : 1 878
    Points
    1 878
    Par défaut
    Ta requête construite ainsi te ramènera les enregistrements de la table prod_carac qui correspondent à ta sélection (p.cod_prd = pCarac.code_prd and pCarac.cod_cw = 68) sinon NULL mais dans tous les cas le nombre de lignes globales sera inchangées car la jointure est facultative

    Pour la table user, il suffit de l'ajouter :
    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
    select p.num_Produit,p.des_prd,
      b.des_bat,e.des_etg,pcarac.des_carw,
      dep.des_dp,dir.des_dr,div.des_div,div.adrs_div,
      resp.ode_usr
    from produit p
      inner join batiment b
        on p.code_bat = b.code_bat
      inner join etage e
        on p.code_etg = e.code_etg
      left outer join prod_carac pCarac
        on (p.cod_prd = pCarac.code_prd 
        and pCarac.cod_cw = 68)
      inner join departement dep
        on p.code_dp = dep.code_dp
      inner join direction dir
        on p.code_dr = dir.code_dr
      inner join division div
        on p.code_div = div.code_div
      inner join prd_resp resp
        on p.cod_prd = resp.cod_prd
        inner join user
          on prd_resp.code_usr = user.code_usr
      inner join categorie cat
        on (p.code_ctg = cat.code_ctg 
        and cat.code_cla = 1)
    Merci de bien "édentées" tes requêtes pour la lisibilité

  3. #3
    Membre actif
    Profil pro
    Inscrit en
    Novembre 2005
    Messages
    551
    Détails du profil
    Informations personnelles :
    Localisation : Suisse

    Informations forums :
    Inscription : Novembre 2005
    Messages : 551
    Points : 260
    Points
    260
    Par défaut
    j'y penserais pour la prochaine fois !

    merci pour la réponse

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

Discussions similaires

  1. Problème de jointure sur plusieurs tables
    Par papouuu dans le forum Langage SQL
    Réponses: 1
    Dernier message: 25/01/2011, 15h02
  2. [AC-2007] Jointure sur plusieurs tables
    Par Steph0 dans le forum Requêtes et SQL.
    Réponses: 2
    Dernier message: 20/01/2011, 09h24
  3. jointure sur plusieurs tables fonctionne pas
    Par jmsch dans le forum Requêtes
    Réponses: 1
    Dernier message: 03/11/2010, 22h55
  4. Jointures sur plusieurs tables
    Par Daibai dans le forum Requêtes
    Réponses: 3
    Dernier message: 17/12/2009, 10h55
  5. hibernate-criteria : jointure sur plusieurs tables
    Par loic72 dans le forum Hibernate
    Réponses: 9
    Dernier message: 24/09/2007, 18h27

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