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 :

[AC2000] Requête incomplète/erronée pour relation n-n


Sujet :

Requêtes et SQL.

  1. #1
    Candidat au Club
    Profil pro
    Inscrit en
    Mars 2008
    Messages
    5
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Mars 2008
    Messages : 5
    Points : 3
    Points
    3
    Par défaut [AC2000] Requête incomplète/erronée pour relation n-n
    Bonjour à tous,

    J'ai créé : - une table Communes qui contient 21 noms de communes (clé primaire)
    - une table Elec/Gaz qui contient le nom (clé primaire) , coordonnées, n° de fax.. de chaque entreprise
    - une table pour faire une relation 1-n avec les 2 autres, Rel_Comm_EG qui contient les 21 noms de communes avec à côté de chacune d'elles les noms de chaque entreprise (clé primaire) de la table Elec/Gaz. En effet, une commune peut avoir plusieurs entreprises Elec/Gaz et une entreprise Elec/Gaz peut travailler sur plusieurs communes.

    Avec une requête, je voudrais obtenir, pour chaque commune, la liste de toutes les entreprises qui y travaillent avec toutes les coordonnées.

    Voici la requête :
    Code sql : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
     
    SELECT Rel_Comm_EG.Nom_Comm, [Elec/Gaz].*
    FROM [Elec/Gaz] LEFT JOIN (Communes RIGHT JOIN Rel_Comm_EG ON Communes.NomComm = Rel_Comm_EG.Nom_Comm) ON [Elec/Gaz].EG_Soc = Rel_Comm_EG.EG1
    WHERE (((Rel_Comm_EG.Nom_Comm)="Ablon"));

    Elle ne me permet d'obtenir que les coordonnées d'une seule entreprise (alors que je devrais en avoir 3 pour la ville d'Ablon).

    En pj, la définition des relations entre les tables.

    Je pense avoir fait une erreur dans ma requête, mais je n'arrive pas à trouver laquelle.
    Merci pour vos orientations
    Images attachées Images attachées   

  2. #2
    Membre expert
    Avatar de mout1234
    Profil pro
    Inscrit en
    Novembre 2006
    Messages
    2 210
    Détails du profil
    Informations personnelles :
    Âge : 55
    Localisation : France, Paris (Île de France)

    Informations forums :
    Inscription : Novembre 2006
    Messages : 2 210
    Points : 3 228
    Points
    3 228
    Par défaut
    Bonsoir et bienvenu sur le forum.

    Même si je ne vois pas pourquoi tu mets des jointure externes dans cette relation (LEFT et RIGHT JOIN) et si le nom de la commune servant de clé ne me parait très judicieux... je n'ai pas remarqué d'anomalie dans cette requête.

    Es-tu sur de tes données?
    Y-a-t-il bien plusieurs lignes pour Ablon (en vérifiant l'écriture)?

  3. #3
    Candidat au Club
    Profil pro
    Inscrit en
    Mars 2008
    Messages
    5
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Mars 2008
    Messages : 5
    Points : 3
    Points
    3
    Par défaut
    En fait, je me suis trompé dans ma table de Rel_Comm_EG :
    j'ai écrit sur une même ligne
    (dans la 1ère case) Nom de la commune (2è case) le nom du concessionnaire (3è case) le nom du concessionnaire (4è case) etc..
    car il peut y avoir pluseurs concessionnaires sur une même commune. Or, en écrivant :
    (1è ligne la 1ère case) Nom de la commune (1ère ligne 2è case) le nom du concessionnaire
    (2è ligne la 1ère case) Nom de la commune (2è ligne 2è case) le nom du concessionnaire
    la requête donne le bon résultat.
    c'est emêtant de devoir procéder de la sorte, n'y a-t-il pas un moyen de faire autrement?

    Je n'ai sans doute pas bien compris l'utilisation des relations et des jointures, mais si je supprime les relations existantes (et donc les jointures) la requête ne marche plus.

    Autre élément que je ne comprends pas :
    que je fasse cette requête
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
     
    SELECT Communes.NomComm, [Elec/Gaz].*
    FROM [Elec/Gaz] INNER JOIN (Communes INNER JOIN Rel_Comm_EG ON Communes.NomComm = Rel_Comm_EG.Nom_Comm) ON [Elec/Gaz].EG_Soc = Rel_Comm_EG.EG1
    WHERE (((Communes.NomComm)="Ablon"));

    ou celle-ci

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
     
    SELECT Rel_Comm_EG.Nom_Comm, [Elec/Gaz].*
    FROM [Elec/Gaz] LEFT JOIN (Communes RIGHT JOIN Rel_Comm_EG ON Communes.NomComm = Rel_Comm_EG.Nom_Comm) ON [Elec/Gaz].EG_Soc = Rel_Comm_EG.EG1
    WHERE (((Rel_Comm_EG.Nom_Comm)="Ablon"));
    j'obtiens le même résultat.

    Je voudrais être bien sûr de comprendre ce que je fais, que les requêtes que je fais sont celles pour obtenir les résultats souhaités, et éviter de procéder de par empirisme.. Tout ca avant de continuer à développer la base de données...
    En tout cas, merci de ta réponse Mout1234, ca m'a fait un peu réfléchir et ca m'a déjà débloqué un problème.

  4. #4
    Candidat au Club
    Profil pro
    Inscrit en
    Mars 2008
    Messages
    5
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Mars 2008
    Messages : 5
    Points : 3
    Points
    3
    Par défaut
    J'ai rajouté une table Eau/Assainissement et une table Rel_EA sur le même modèle que pour Elec/Gaz et Rel_EG. Je voulais avoir les noms des entreprises avec leurs coordonnées pour EAU/Assainissement et pour Elec/Gaz sans doublon et affiché l'une sous l'autre.
    En regardant ce tutoriel http://access.developpez.com/faq/?page=Concept#UNIONALL , j'ai compris ce qu'il fallait faire pour obtenir ce que je voulais : il fallait juste que je copie-colle mes 2 requêtes et mettre UNION entre les 2
    ca m'a pris du temps, c'était pas bien compliqué voir même ridiculeusement facile pour certains mais qu'est-ce que je suis content d'avoir trouvé tout seul

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

Discussions similaires

  1. [MySQL] Message de sortie erroné pour une requête de mise à jour
    Par ikramta dans le forum PHP & Base de données
    Réponses: 4
    Dernier message: 17/03/2009, 17h23
  2. formulaire pour relation plusieurs à plusieurs
    Par Gali dans le forum Access
    Réponses: 4
    Dernier message: 26/04/2006, 10h27
  3. Requête incomplète
    Par decour dans le forum Access
    Réponses: 1
    Dernier message: 11/01/2006, 11h03
  4. Création BD Access Code SQL pour relation 1-1 ?
    Par colorid dans le forum Requêtes et SQL.
    Réponses: 2
    Dernier message: 26/10/2005, 16h42
  5. [Requête SQL] Problème pour echantilloner
    Par jool dans le forum Langage SQL
    Réponses: 6
    Dernier message: 27/08/2005, 09h08

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