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 :

Requete SQL avec jointure multiple


Sujet :

Langage SQL

  1. #1
    Membre à l'essai
    Inscrit en
    Avril 2005
    Messages
    46
    Détails du profil
    Informations forums :
    Inscription : Avril 2005
    Messages : 46
    Points : 18
    Points
    18
    Par défaut Requete SQL avec jointure multiple
    Bonjour,

    Bon je ne pense pas que mon probleme soit très compliqué, mais j'avoue ne pas trop piger la démarche à suivre pour ce que je veux faire :

    Cette requete doit s'executer sous ACCESS 2003 et ORACLE 9.2

    J'ai 2 tables :

    • PERSONNEL
    • CONTACT


    Dans CONTACT j'ai les champs :

    • id_contact
    • telephone
    • adresse



    Dans PERSONNEL j'ai les champs :

    • id_personnel
    • id_contact_pro (qui correspond à un id_contact de la table CONTACT)
    • id_contact_home (qui correspond à un id_contact de la table CONTACT)


    Et dans ma requête je voudrais afficher :

    id_personnel, tel_pro, adresse_pro, tel_home, adresse_home

    Donc mon souci est que la table CONTACT contient tous les contacts qu'ils soient pro ou home et que dans ma requete je dois interroger deux fois la table CONTACT, mais avec deux conditions de jointures différentes.

    Comment faire ?

    Merci pour votre aide

  2. #2
    Modérateur
    Avatar de al1_24
    Homme Profil pro
    Retraité
    Inscrit en
    Mai 2002
    Messages
    9 109
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 63
    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 109
    Points : 28 436
    Points
    28 436
    Par défaut
    En faisant deux jointures sur le table CONTACT avec des alias différents.
    Cours sur les Jointures

  3. #3
    Expert éminent sénior
    Avatar de fsmrel
    Homme Profil pro
    Spécialiste en bases de données
    Inscrit en
    Septembre 2006
    Messages
    8 113
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Essonne (Île de France)

    Informations professionnelles :
    Activité : Spécialiste en bases de données
    Secteur : Conseil

    Informations forums :
    Inscription : Septembre 2006
    Messages : 8 113
    Points : 31 590
    Points
    31 590
    Billets dans le blog
    16
    Par défaut
    Par exemple, si une personne a toujours des coordonnées professionnelles et domestiques :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    SELECT   a.id_personnel
           , c.telephone as tel_pro, c.adresse as adr_pro
           , d.telephone as tel_home, d.adresse as adr_home 
    From     personnel as a
           , contact   as c
           , contact   as d
    Where    a.id_contact_pro = c.id_contact
      And    a.id_contact_home = d.id_contact ;
    Sinon, si elle ne peut avoir qu'un type de coordonnées :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    SELECT   a.id_personnel
           , c.telephone as tel_pro, c.adresse as adr_pro
           , d.telephone as tel_home, d.adresse as adr_home 
    From     personnel as a
             left outer join contact as c on a.id_contact_pro = c.id_contact
             left outer join contact as d on a.id_contact_home = d.id_contact ;
    La solution ne devrait pas être très loin.

  4. #4
    Membre régulier

    Profil pro
    Enseignant
    Inscrit en
    Novembre 2007
    Messages
    32
    Détails du profil
    Informations personnelles :
    Âge : 38
    Localisation : Algérie

    Informations professionnelles :
    Activité : Enseignant

    Informations forums :
    Inscription : Novembre 2007
    Messages : 32
    Points : 99
    Points
    99
    Par défaut
    La requete donnée dans la reponse doit matcher!
    Par contre je pense que votre modèle n'est pas conforme ni à MERISE ni à UML!

  5. #5
    Membre confirmé Avatar de elbj
    Homme Profil pro
    Ingénieur développement logiciels
    Inscrit en
    Novembre 2004
    Messages
    371
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 50
    Localisation : France, Alpes Maritimes (Provence Alpes Côte d'Azur)

    Informations professionnelles :
    Activité : Ingénieur développement logiciels
    Secteur : Services à domicile

    Informations forums :
    Inscription : Novembre 2004
    Messages : 371
    Points : 558
    Points
    558
    Par défaut
    Bonjour

    Effectivement le modèle n'est pas très bon. Mais nous n'avons pas vraiment de détail sur les relations entre Personnel et Contact.

    Dans le cas où un contact ne correspond qu'à une personne on aurait le modèle suivant :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    PERSONNEL
    ID_Personnel
    Nom_Personnel
    
    TYPE_CONTACT
    ID_Type_Contact
    Nom_Type_Contact
    
    CONTACT
    ID_Personnel
    ID_Type_Contact
    Adresse_Contact
    Telephone_Contact
    Maintenant on peut supposer que plusieurs personnes puissent être contactées via le même contact :
    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
    PERSONNEL
    ID_Personnel
    Nom_Personnel
    
    TYPE_CONTACT
    ID_Type_Contact
    Nom_Type_Contact
    
    CONTACT
    ID_Contact
    Adresse_Contact
    Telephone_Contact
    
    CONTACT_PERSONNEL
    ID_Personnel
    ID_Contact
    ID_Type_Contact
    Reconnaissons le ces modèles ont leur limites en terme de sémantique car je ne sais rien des relations entre Personnel et Contact. Mais ils permettent d'effectuer des requêtes plus simples.

    Cordialement

    Christophe B.

  6. #6
    Expert éminent sénior
    Avatar de fsmrel
    Homme Profil pro
    Spécialiste en bases de données
    Inscrit en
    Septembre 2006
    Messages
    8 113
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Essonne (Île de France)

    Informations professionnelles :
    Activité : Spécialiste en bases de données
    Secteur : Conseil

    Informations forums :
    Inscription : Septembre 2006
    Messages : 8 113
    Points : 31 590
    Points
    31 590
    Billets dans le blog
    16
    Par défaut
    Citation Envoyé par dotzero
    je pense que votre modèle n'est pas conforme ni à MERISE ni à UML!
    Une rétroconception Merise et UML fonctionne parfaitement, donc le MLD proposé est techniquement conforme.

    Le problème de requête initial est simplement à corréler à la présence d'une paire d'associations entre Personnel et Contact (coordonnées professionnelles d'une part et coordonnées domestiques d'autre part), paire qui n'a rien de choquant.
    Au plan sémantique, si une instance Personnel et une instance Contact désignent des entités distinctes, il n'y a pas grand-chose à redire. S'il s'agit de la même entité, on peut discuter. Cela dit, la question posée concernait l'opérateur de jointure, ni plus, ni moins.

Discussions similaires

  1. Réponses: 0
    Dernier message: 02/03/2011, 23h26
  2. Requete SQL avec jointure sur trois tables
    Par pit2121 dans le forum Langage SQL
    Réponses: 1
    Dernier message: 19/05/2008, 23h07
  3. Simplifier requete SQL avec COUNT multiples
    Par french-petzouille dans le forum Requêtes
    Réponses: 4
    Dernier message: 22/10/2007, 10h57
  4. [SQL 2000] Optimisation requête avec jointure multiple
    Par zooffy dans le forum Développement
    Réponses: 5
    Dernier message: 18/09/2007, 15h38
  5. [SQL 2000] Optimisation requête avec jointure multiple
    Par zooffy dans le forum MS SQL Server
    Réponses: 5
    Dernier message: 18/09/2007, 15h38

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