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 MySQL Discussion :

Jointure qui implique 3 tables


Sujet :

Requêtes MySQL

  1. #1
    Expert confirmé
    Avatar de laurentSc
    Homme Profil pro
    Webmaster débutant perpétuel !
    Inscrit en
    Octobre 2006
    Messages
    10 384
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 60
    Localisation : France, Isère (Rhône Alpes)

    Informations professionnelles :
    Activité : Webmaster débutant perpétuel !
    Secteur : Industrie

    Informations forums :
    Inscription : Octobre 2006
    Messages : 10 384
    Points : 5 732
    Points
    5 732
    Billets dans le blog
    1
    Par défaut Jointure qui implique 3 tables
    Bonjour,

    pas trop à l'aise pour faire une jointure qui implique 2 tables, là je suis sur un cas qui implique 3 tables. J'aurais donc besoin d'aide pour élaborer la requête.
    Les 3 tables sont : user, location et country.
    Code sql : 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
    26
    27
    28
    29
    30
    31
    32
    CREATE TABLE `user` (
      `user_key` smallint NOT NULL AUTO_INCREMENT,
      `sesa` int DEFAULT NULL,
      `lastname` varchar(255) CHARACTER SET utf8 COLLATE utf8_bin DEFAULT NULL,
      `firstname` varchar(255) CHARACTER SET utf8 COLLATE utf8_bin DEFAULT NULL,
      `email` varchar(255) CHARACTER SET utf8 COLLATE utf8_bin DEFAULT NULL,
      `company` varchar(50) COLLATE utf8_bin DEFAULT NULL,
      `buunitname` varchar(50) COLLATE utf8_bin DEFAULT NULL,
      `location` varchar(50) COLLATE utf8_bin DEFAULT NULL,
      `manager_key` smallint DEFAULT NULL,
      PRIMARY KEY (`user_key`),
      UNIQUE KEY `sesa_UNIQUE` (`sesa`),
      UNIQUE KEY `email_UNIQUE` (`email`)
    ) ENGINE=InnoDB AUTO_INCREMENT=61 DEFAULT CHARSET=utf8 COLLATE=utf8_bin;
     
    CREATE TABLE `location` (
      `location_key` smallint NOT NULL AUTO_INCREMENT,
      `location` varchar(40) COLLATE utf8_bin NOT NULL DEFAULT '',
      `country_key` smallint NOT NULL DEFAULT '2',
      PRIMARY KEY (`location_key`),
      UNIQUE KEY `uk_location` (`location`),
      KEY `fk_country` (`country_key`),
      CONSTRAINT `fk_country` FOREIGN KEY (`country_key`) REFERENCES `country` (`country_key`)
    ) ENGINE=InnoDB AUTO_INCREMENT=18 DEFAULT CHARSET=utf8 COLLATE=utf8_bin;
     
    CREATE TABLE `country` (
      `country_key` smallint NOT NULL AUTO_INCREMENT,
      `country` varchar(30) CHARACTER SET utf8 COLLATE utf8_bin NOT NULL DEFAULT '',
      `region` varchar(30) CHARACTER SET utf8 COLLATE utf8_bin DEFAULT NULL,
      PRIMARY KEY (`country_key`),
      UNIQUE KEY `uk_country` (`country`)
    ) ENGINE=InnoDB AUTO_INCREMENT=11 DEFAULT CHARSET=utf8 COLLATE=utf8_bin;

    Je pars de la donnée sesa (unique key dans la table user). De la table user, je déduis la valeur location, WHERE sesa="la_donnee_sesa". Puis dans la table location, je déduis la valeur country_key, where `location`="la_valeur_obtenue_juste_avant". Enfin de la table country, je déduis la valeur country, where country_key="la_valeur_obtenue_juste_avant". Comment peut-on faire ça en une seule requête, SVP ?
    Il vaut mieux viser la perfection et la manquer que viser l'imperfection et l'atteindre. - Bertrand Russell

    Si la discussion est résolue, merci de cliquer sur le bouton

  2. #2
    Modérateur
    Avatar de escartefigue
    Homme Profil pro
    bourreau
    Inscrit en
    Mars 2010
    Messages
    10 136
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Loir et Cher (Centre)

    Informations professionnelles :
    Activité : bourreau
    Secteur : Finance

    Informations forums :
    Inscription : Mars 2010
    Messages : 10 136
    Points : 38 561
    Points
    38 561
    Billets dans le blog
    9
    Par défaut
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    select [...]
    from USER  US
    inner join LOCATION LO
       on LO.location_key=@location <== calculée à partir de US.sesa 
    inner join COUNTRY  CO
       on CO.country_key = LO.country_key
    where [...]

  3. #3
    Expert confirmé
    Avatar de laurentSc
    Homme Profil pro
    Webmaster débutant perpétuel !
    Inscrit en
    Octobre 2006
    Messages
    10 384
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 60
    Localisation : France, Isère (Rhône Alpes)

    Informations professionnelles :
    Activité : Webmaster débutant perpétuel !
    Secteur : Industrie

    Informations forums :
    Inscription : Octobre 2006
    Messages : 10 384
    Points : 5 732
    Points
    5 732
    Billets dans le blog
    1
    Par défaut
    Merci pour cette réponse très rapide ; néanmoins, je ne sais pas comment l'utiliser. En effet, la donnée à trouver est country. Et cette colonne n'existe pas dans la table user, donc dans le SELECT colonneXXX FROM user, je ne sais pas quelle colonne mettre...
    Il vaut mieux viser la perfection et la manquer que viser l'imperfection et l'atteindre. - Bertrand Russell

    Si la discussion est résolue, merci de cliquer sur le bouton

  4. #4
    Expert confirmé
    Avatar de laurentSc
    Homme Profil pro
    Webmaster débutant perpétuel !
    Inscrit en
    Octobre 2006
    Messages
    10 384
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 60
    Localisation : France, Isère (Rhône Alpes)

    Informations professionnelles :
    Activité : Webmaster débutant perpétuel !
    Secteur : Industrie

    Informations forums :
    Inscription : Octobre 2006
    Messages : 10 384
    Points : 5 732
    Points
    5 732
    Billets dans le blog
    1
    Par défaut
    J'ai trouvé en m'inspirant de la réponse que tu m'as faite

    Citation Envoyé par SQL
    SELECT country FROM country C JOIN location L on L.country_key=C.country_key JOIN user U ON U.location=L.location where U.sesa=une_valeur
    Il vaut mieux viser la perfection et la manquer que viser l'imperfection et l'atteindre. - Bertrand Russell

    Si la discussion est résolue, merci de cliquer sur le bouton

  5. #5
    Expert confirmé
    Avatar de laurentSc
    Homme Profil pro
    Webmaster débutant perpétuel !
    Inscrit en
    Octobre 2006
    Messages
    10 384
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 60
    Localisation : France, Isère (Rhône Alpes)

    Informations professionnelles :
    Activité : Webmaster débutant perpétuel !
    Secteur : Industrie

    Informations forums :
    Inscription : Octobre 2006
    Messages : 10 384
    Points : 5 732
    Points
    5 732
    Billets dans le blog
    1
    Par défaut
    Je viens de trouver une autre façon de faire (j'avais oublié avoir déjà cherché) :

    Code sql : Sélectionner tout - Visualiser dans une fenêtre à part
    select country from `country` where country_key=(select country_key from `location` where location=(select location from `user` where sesa=une_valeur))
    Il vaut mieux viser la perfection et la manquer que viser l'imperfection et l'atteindre. - Bertrand Russell

    Si la discussion est résolue, merci de cliquer sur le bouton

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

Discussions similaires

  1. Réponses: 3
    Dernier message: 23/03/2016, 22h11
  2. Select sur table de jointure qui pointe sur la meme Table.
    Par yakamax dans le forum Langage SQL
    Réponses: 2
    Dernier message: 25/06/2008, 11h44
  3. Jointure externe sur 2 tables
    Par Danae dans le forum Langage SQL
    Réponses: 11
    Dernier message: 19/07/2005, 15h37
  4. [SQL] Requête à jointure qui ne fonctionne pas
    Par Bensor dans le forum Langage SQL
    Réponses: 2
    Dernier message: 09/12/2004, 16h10
  5. jointure sur une même table
    Par guillaumeVb6 dans le forum Langage SQL
    Réponses: 7
    Dernier message: 06/09/2004, 15h08

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