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

Requêtes et SQL. Discussion :

outer join avec access


Sujet :

Requêtes et SQL.

  1. #1
    Membre du Club
    Profil pro
    Inscrit en
    Février 2005
    Messages
    101
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Février 2005
    Messages : 101
    Points : 64
    Points
    64
    Par défaut outer join avec access
    Bonjour,

    J'ai une liste de clients avec des contacts. Certains client ont un contact principale. Je souhaite affficher tous les clients avec leurs contact principale si il en ont. Le problème est que avec la jointure INNER JOIN il ne m'affiche que les clients qui ont un contact principale. La fonction OUTER JOIN ne marche sur access. Comment faire pour avoir la liste des clients avec pour chaque clients son contact principale si il en a un.

    merci d'avance

  2. #2
    Membre chevronné

    Profil pro
    Inscrit en
    Avril 2006
    Messages
    1 399
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Avril 2006
    Messages : 1 399
    Points : 2 221
    Points
    2 221
    Par défaut
    bonjour,

    faire un LEFT JOIN au lieu d'un INNER JOIN.

    cordialement,

    philippe

  3. #3
    Membre du Club
    Profil pro
    Inscrit en
    Février 2005
    Messages
    101
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Février 2005
    Messages : 101
    Points : 64
    Points
    64
    Par défaut
    cela ne marche pas.

    J'ai une table client_contact qui fait la liaison entre le client et le contact (le but est de pouvoir avoir un même contact pour plusieurs clients).

    voici ma requête:

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
     
    SELECT clients.id_client, clients.nom_client AS Nom, groupes.nom_groupe AS Groupe, clients.tel_client AS Téléphone, clients.fax_client AS Fax, contacts.nom_contact, contacts.prenom_contact, clients.estSupprime_client, contacts.estPrincipale_contact
    FROM contacts RIGHT JOIN ((groupes RIGHT JOIN clients ON groupes.id_groupe = clients.id_groupe) LEFT JOIN clients_contacts ON clients.id_client = clients_contacts.id_client) ON contacts.id_contact = clients_contacts.id_contact
    WHERE (((clients.estSupprime_client)=False) AND ((contacts.estPrincipale_contact)=True))
    ORDER BY clients.nom_client;
    J'ai fait un jointure à gauche et une jointure à droite. J'ai toujours le même problème. Seul les clients ayant un contact principale s'affiche.

    Où est mon erreur?

    Merci pour ton aide

  4. #4
    Membre chevronné

    Profil pro
    Inscrit en
    Avril 2006
    Messages
    1 399
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Avril 2006
    Messages : 1 399
    Points : 2 221
    Points
    2 221
    Par défaut
    bonjour,

    Seul les clients ayant un contact principale s'affiche.
    ne serait-ce pas lié à cette condition active ?
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    ...AND ((contacts.estPrincipale_contact)=True)
    essayer ceci :
    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
     
    SELECT Distinct 
           clients.id_client, 
           clients.nom_client AS Nom, 
           groupes.nom_groupe AS Groupe, 
           clients.tel_client AS Téléphone, 
           clients.fax_client AS Fax, 
           contacts.nom_contact, 
           contacts.prenom_contact
    FROM   ((clients LEFT JOIN clients_contacts ON clients.id_client = clients_contacts.id_client) 
            LEFT JOIN groupes ON clients.id_groupe = groupes.id_groupe) 
            LEFT JOIN [SELECT * FROM CONTACTS WHERE estPrincipale_contact=True]. AS contacts 
            ON clients_contacts.id_contact = contacts.id_contact
    WHERE   clients.estSupprime_client=False
    ORDER BY clients.nom_client;
    Ca permet d'afficher tous les clients mais seulement les contacts qui sont principaux.

    cordialement,

    philippe

  5. #5
    Membre chevronné

    Profil pro
    Inscrit en
    Avril 2006
    Messages
    1 399
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Avril 2006
    Messages : 1 399
    Points : 2 221
    Points
    2 221
    Par défaut
    re bonjour,

    pour éviter d'avoir des clients en doublon il vaut mieux faire ça en deux requetes et c'est plus propre :

    Première requete nommée <RqContactsPrincipaux>
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
     
    SELECT clients_contacts.id_client, 
           contacts.nom_contact, 
           contacts.prenom_contact
    FROM   clients_contacts INNER JOIN contacts 
           ON clients_contacts.id_contact = contacts.id_contact
    WHERE  contacts.estPrincipale_contact=True;
    et la deuxième :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
     
    SELECT clients.nom_client, 
           groupes.nom_groupe, 
           clients.tel_client, 
           clients.fax_client, 
           RqContactsPrincipaux.nom_contact, 
           RqContactsPrincipaux.prenom_contact
    FROM  (clients LEFT JOIN RqContactsPrincipaux 
          ON clients.id_client = RqContactsPrincipaux.id_client) 
          LEFT JOIN groupes ON clients.id_groupe = groupes.id_groupe
    WHERE clients.estSupprime_client=False;
    en espérant que ça fonctionne car je n'ai pas la structure exacte de vos données.

    cordialement,

    philippe

  6. #6
    Membre du Club
    Profil pro
    Inscrit en
    Février 2005
    Messages
    101
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Février 2005
    Messages : 101
    Points : 64
    Points
    64
    Par défaut
    merci beaucoup pour ta réponse.

    Je ne savais pas que l'on pouvait faire une jointure avec une autre requête.

    Merci

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

Discussions similaires

  1. L'équivalent de FULL OUTER JOIN sous ACCESS
    Par Le Pharaon dans le forum Langage SQL
    Réponses: 2
    Dernier message: 24/03/2013, 13h36
  2. left outer join avec condition
    Par fisto dans le forum Requêtes et SQL.
    Réponses: 3
    Dernier message: 14/08/2007, 09h52
  3. OUTER JOIN avec un OR
    Par Ujitsu dans le forum SQL
    Réponses: 9
    Dernier message: 30/03/2007, 16h29
  4. Outer join avec condition OR
    Par Ujitsu dans le forum Langage SQL
    Réponses: 1
    Dernier message: 29/03/2007, 00h08
  5. Réponses: 6
    Dernier message: 07/10/2006, 00h15

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