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 :

[MS Access] Problème de jointure


Sujet :

Langage SQL

  1. #1
    Rédacteur
    Avatar de Erakis
    Homme Profil pro
    Développeur informatique
    Inscrit en
    Octobre 2003
    Messages
    523
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 44
    Localisation : Canada

    Informations professionnelles :
    Activité : Développeur informatique
    Secteur : High Tech - Électronique et micro-électronique

    Informations forums :
    Inscription : Octobre 2003
    Messages : 523
    Points : 233
    Points
    233
    Par défaut [MS Access] Problème de jointure
    Bonjour.

    J'ai une table de sensors et de Data logger.

    Sensors (id, name, etc...)
    DataLoggers (id, name, description, location, etc..)
    DataLoggersSensors (DataLogger_ID, Sensor_ID)

    La table Sensors contient une liste de sensors
    La table DataLogger contient la liste des catalogueurs.
    La table DataLoggersSensors contient la liste des sensors reconnu pour chacun des Dataloggers.

    Supposons que je veuille récupérer le sensor ayant le ID 10 mais pour le DataLogger ayant le nom 'Gauche'.

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    SELECT Sensors.*
    FROM Sensors INNER JOIN DataLoggersSensors ON Sensors.ID = DataLoggersSensors.Sensor_ID INNER JOIN DataLoggers ON DataLoggers.ID = (SELECT ID FROM DataLoggers WHERE Name = 'Gauche');
    MS Access refuse cette requête, suis-je fou ?
    Je travail habituellement sous SQL server et me semble bien que celle-ci serait accepté mais bon... j'espère que vous pourrez m'aider.

    Merci :
    Mieux vaut ne rien savoir que beaucoup savoir à moitié !
    Faite vous en pas avec la vie, personne en est sortie vivant !

  2. #2
    vic
    vic est déconnecté
    Membre confirmé

    Profil pro
    Inscrit en
    Août 2002
    Messages
    431
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Août 2002
    Messages : 431
    Points : 498
    Points
    498
    Par défaut
    Tu ne peux pas faire un "ON" sur un paramètre externe, il faut que ce soit un champ de chacune des tables.

    Je ferais plutôt
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    SELECT Sensors.*
    FROM Sensors INNER JOIN DataLoggersSensors ON Sensors.ID = DataLoggersSensors.Sensor_ID INNER JOIN DataLoggers ON DataLoggers.ID = DataLoggersSensors.DataLogger_ID WHERE DataLoggers.Name = 'Gauche'

  3. #3
    Rédacteur
    Avatar de Erakis
    Homme Profil pro
    Développeur informatique
    Inscrit en
    Octobre 2003
    Messages
    523
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 44
    Localisation : Canada

    Informations professionnelles :
    Activité : Développeur informatique
    Secteur : High Tech - Électronique et micro-électronique

    Informations forums :
    Inscription : Octobre 2003
    Messages : 523
    Points : 233
    Points
    233
    Par défaut
    Citation Envoyé par vic
    Tu ne peux pas faire un "ON" sur un paramètre externe, il faut que ce soit un champ de chacune des tables.

    Merci pour votre aide

    Je ferais plutôt
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    SELECT Sensors.*
    FROM Sensors INNER JOIN DataLoggersSensors ON Sensors.ID = DataLoggersSensors.Sensor_ID INNER JOIN DataLoggers ON DataLoggers.ID = DataLoggersSensors.DataLogger_ID WHERE DataLoggers.Name = 'Gauche'
    À partir du nom (et non du ID) d'un DataLogger je dois lire un sensor faisant partir de ceux qui lui appartient. Il se peut que cela retourn NULL mais alors cela voudra dire que ce Sensors n'est pas reconnu par ce DataLogger, donc dans la table de relation DataLoggerSensors ce Sensor n'est pas associé à ce DataLogger.

    J'ai refait la requête à l'aide de MS Access et voilà à quoi j'arrive :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
     
    SELECT Sensors.*
    FROM (Sensors INNER JOIN DataLoggers ON Sensors.ID = DataLoggers.ID) INNER JOIN DataLoggersSensors ON (DataLoggers.ID = DataLoggersSensors.DataLogger_ID) AND (Sensors.ID = DataLoggersSensors.Sensor_ID)
    WHERE (((DataLoggers.Name)="Gauche") AND ((Sensors.ID)=10));
    Ma table Sensors contient :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
     
    ID	Name	
    1	Sensor_1	
    2	Sensor_2	
    3	Sensor_3
    Ma table DataLoggers contient :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
     
    ID     Name
    1     Gauche
    2     Droit
    Ma table DataLoggersSensors contient :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
     
    DataLogger_ID	Sensor_ID
    1	                   1
    1	                   2
    1	                   3
    Le problème avec cette requête il ne me sort pas le sensor reconnu par ce DataLogger. Puisque la relation est fait à partir de la clé primaire sur 3 tables. À mon avis il faudrait commencé par trouvé le ID de ce DataLogger à partir de son NOM. Ensuite faire un relation entre la table Sensors et DataloggersSensor pour récupérer le sensor avec un WHERE sur le nom du sensor voulu.

    Mais je vois pas comment.
    Mieux vaut ne rien savoir que beaucoup savoir à moitié !
    Faite vous en pas avec la vie, personne en est sortie vivant !

  4. #4
    Rédacteur
    Avatar de Erakis
    Homme Profil pro
    Développeur informatique
    Inscrit en
    Octobre 2003
    Messages
    523
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 44
    Localisation : Canada

    Informations professionnelles :
    Activité : Développeur informatique
    Secteur : High Tech - Électronique et micro-électronique

    Informations forums :
    Inscription : Octobre 2003
    Messages : 523
    Points : 233
    Points
    233
    Par défaut
    Voilà ce qu'il me fallait
    J'ai trouvé solution en tâtant...
    Avec du temps et de la patience, on finit toujours par trouver une solutions au pire problèmes. Pas toujours la meilleure mais ça fonctionne c'est ça qui m'importe pour le moment.

    Merci à tous quand même.
    Si toutefois vous avez des commentaires en rapport avec cette requête je suis preneur...

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
     
    SELECT Sensors.ID, Sensors.Name, Sensors.Unit FROM Sensors INNER JOIN 
    (
    SELECT DataLoggersSensors.Sensor_ID AS sID
    FROM DataLoggers INNER JOIN DataLoggersSensors ON DataLoggers.ID = DataLoggersSensors.DataLogger_ID
    WHERE (DataLoggers.Name="Gauche") 
    ) AS subTable ON Sensors.ID = subTable.sID WHERE (Sensors.ID = 10);
    Mieux vaut ne rien savoir que beaucoup savoir à moitié !
    Faite vous en pas avec la vie, personne en est sortie vivant !

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

Discussions similaires

  1. [AC-2010] Problème de jointure sous Access 2010
    Par a.aiouaz dans le forum Access
    Réponses: 2
    Dernier message: 07/09/2012, 09h16
  2. Problème de jointures sous Access
    Par aurel53 dans le forum Requêtes et SQL.
    Réponses: 8
    Dernier message: 05/11/2009, 17h21
  3. [Access] Probléme simplification requete Jointure Externe
    Par paflolo dans le forum Langage SQL
    Réponses: 6
    Dernier message: 02/03/2006, 10h18
  4. Problème de jointure entre 2 tables Access
    Par MITCH31 dans le forum VBA Access
    Réponses: 8
    Dernier message: 14/12/2005, 14h31
  5. [Access]Problème de sript avec LIKE
    Par Oberown dans le forum ASP
    Réponses: 3
    Dernier message: 06/10/2004, 17h55

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