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 :

3 Inner Join sur la même table


Sujet :

Requêtes MySQL

  1. #1
    Nouveau membre du Club
    Inscrit en
    Avril 2004
    Messages
    102
    Détails du profil
    Informations personnelles :
    Âge : 45

    Informations forums :
    Inscription : Avril 2004
    Messages : 102
    Points : 35
    Points
    35
    Par défaut 3 Inner Join sur la même table
    Je vous explique mon problème.

    J'ai une table "livraison" dans laquelle on retrouve les commandes et les id des clients et une table "client" qui contient les id et les noms.

    Dans ma tables livraisons, il peut y avoir jusqu'à 3 clients pour une livraison.
    Ce qui nous donne une ligne "ID" - "Commande" - "ID_client1" - "ID_client2" - "ID_client3".

    Ma question peut vous paraitre bête, mais je ne parviens pas à afficher tous les client avec une requête SQL.
    Je pensais à une requête de ce type :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    SELECT * FROM exportation INNER JOIN customers ON exportation.customer1_id = customers.id INNER JOIN customers ON exportation.customer2_id = customers.id INNER JOIN customers ON exportation.customer3_id = customers.id;
    Mais ça ne fonctionne pas.

    Qqun peut m'aider ?

    Merci d'avance.

  2. #2
    Nouveau membre du Club
    Inscrit en
    Avril 2007
    Messages
    42
    Détails du profil
    Informations forums :
    Inscription : Avril 2007
    Messages : 42
    Points : 31
    Points
    31
    Par défaut
    J'ai eu un problème de ce genre.
    la raison était que dans mes tables, je n'avais pas le même nombre d'enregistrements. Le inner join quand on l'utilise plusieurs fois d'affilé ne prend que les enregistrements qui sont communs à toutes les tables et les autres il les basarde.

    la solution est d'utiliser LEFT OU RIGHT OUTER JOIN.

  3. #3
    Nouveau membre du Club
    Inscrit en
    Avril 2004
    Messages
    102
    Détails du profil
    Informations personnelles :
    Âge : 45

    Informations forums :
    Inscription : Avril 2004
    Messages : 102
    Points : 35
    Points
    35
    Par défaut
    Merci pour ta réponse.

    Peux-tu me dire comment je dois indiquer ma requête, car lorsque j'utilise
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    SELECT * FROM exportation left JOIN customers ON exportation.customer1_id = customers.id left JOIN customers ON exportation.customer2_id = customers.id left JOIN customers ON exportation.customer3_id = customers.id;
    j'ai toujours une erreur, à savoir
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    #1066 - Not unique table/alias: 'customers'

  4. #4
    Nouveau membre du Club
    Inscrit en
    Avril 2007
    Messages
    42
    Détails du profil
    Informations forums :
    Inscription : Avril 2007
    Messages : 42
    Points : 31
    Points
    31
    Par défaut
    Essaye ça :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    SELECT * FROM exportation e
    LEFT JOIN customers c1 ON e.customer1_id = c1.id
    LEFT JOIN customers c2 ON e.customer2_id = c2.id
    LEFT JOIN customers c3 ON e.customer3_id = c3.id;

  5. #5
    Nouveau membre du Club
    Inscrit en
    Avril 2004
    Messages
    102
    Détails du profil
    Informations personnelles :
    Âge : 45

    Informations forums :
    Inscription : Avril 2004
    Messages : 102
    Points : 35
    Points
    35
    Par défaut
    Génial, ça fonctionne parfaitement.

    Seulement, il me reste une petite question.
    Quand j'exécute cette requête, je vois que j'ai 3 colonnes avec le même nom : "name". C'est tout à fait logique étant donné que j'ai 3 clients.

    Y'a-t-il moyen de les renommer afin que je puisse les appeler facilement sous php ?

    Merci d'avance.

  6. #6
    Nouveau membre du Club
    Inscrit en
    Avril 2007
    Messages
    42
    Détails du profil
    Informations forums :
    Inscription : Avril 2007
    Messages : 42
    Points : 31
    Points
    31
    Par défaut
    En fait, je pense qu'au lieu de mettre un * dans ton SELECT, il faudrait mettre la liste des colonnes que tu souhaites et mettre un alias sur celle dont tu veux changer le nom.

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    SELECT c1.name as name1, c2.name as name2 ...

  7. #7
    Nouveau membre du Club
    Inscrit en
    Avril 2004
    Messages
    102
    Détails du profil
    Informations personnelles :
    Âge : 45

    Informations forums :
    Inscription : Avril 2004
    Messages : 102
    Points : 35
    Points
    35
    Par défaut
    C'est parfait, ça fonctionne très bien maintenant.

    Un tout grand merci.

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

Discussions similaires

  1. Deux inner join sur une même table
    Par Pachina75 dans le forum Langage SQL
    Réponses: 5
    Dernier message: 04/06/2014, 14h54
  2. LEFT JOIN sur une même table
    Par grinder59 dans le forum Requêtes
    Réponses: 2
    Dernier message: 13/01/2012, 15h30
  3. Requete avec inner join sur une meme table
    Par mattmax dans le forum Développement
    Réponses: 1
    Dernier message: 15/12/2011, 14h34
  4. Cross join sur la même table
    Par Dylanddd dans le forum Langage SQL
    Réponses: 3
    Dernier message: 18/02/2011, 17h27
  5. 2 LEFT JOIN sur une même table
    Par dakan dans le forum Langage SQL
    Réponses: 2
    Dernier message: 02/10/2007, 13h51

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