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 :

[MySQL] Jointures externes SQL (débutant)


Sujet :

Langage SQL

  1. #1
    Invité
    Invité(e)
    Par défaut [MySQL] Jointures externes SQL (débutant)
    Bonjour à tous,

    Je cherche à écrire une requête SQL mais je n'obtiens pas les résultats que j'espère.
    J'ai trois tables: "Membres", "Albums" et "Albums_Photos"; les tables Albums et Albums_Photos ont une colone "AuteurID" qui renvoient toutes les deux vers une colone "ID" de ma table "Membres".
    Je voudrais obtenir une requête qui me sélectionne tous les champs de la table des Membres et qui me totalise le nombre d'albums postés et le nombre de photos postées. Alors j'ai écrit ça:
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    select `membres`.*,count(`albums`.`ID`) AS `nbAlbums`,count(`albums_photos`.`ID`) AS `nbPhotos`
    from `albums` left join `membres` on(`albums`.`AuteurID` = `membres`.`ID`)
    left join `albums_photos` on(`albums_photos`.`AuteurID` = `membres`.`ID`)
    group by `membres`.`Pseudo`;
    ...mais MySQL ne me liste que les membres ayant posté un album et pas ceux qui n'ont posté que des photos...

    Pouvez-vous m'expliquer mon erreur? Visiblement j'ai mal compris ce tutoriel... Merci!

  2. #2
    Membre confirmé
    Avatar de DBProg
    Profil pro
    Étudiant
    Inscrit en
    Juillet 2006
    Messages
    242
    Détails du profil
    Informations personnelles :
    Âge : 39
    Localisation : France, Moselle (Lorraine)

    Informations professionnelles :
    Activité : Étudiant

    Informations forums :
    Inscription : Juillet 2006
    Messages : 242
    Points : 579
    Points
    579
    Par défaut
    Bonjour,

    Dans ta requête il faut en effet faire une jointure externe comme tu as mis dans le titre du sujet, mais ce n'est pas ce que tu fais. Il faut employer le mot clé OUTER.

    Je ne sais pas si ça va donner le résultat que tu cherches, mais c'est comme ça qu'on fait une jointure externe.

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    select `membres`.*,count(`albums`.`ID`) AS `nbAlbums`,count(`albums_photos`.`ID`) AS `nbPhotos`
    from `albums`
    left outer join `membres` on(`albums`.`AuteurID` = `membres`.`ID`)
    left outer join `albums_photos` on(`albums_photos`.`AuteurID` = `membres`.`ID`)
    group by `membres`.`Pseudo`;

  3. #3
    Modérateur
    Avatar de al1_24
    Homme Profil pro
    Retraité
    Inscrit en
    Mai 2002
    Messages
    9 102
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 63
    Localisation : France, Val de Marne (Île de France)

    Informations professionnelles :
    Activité : Retraité
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : Mai 2002
    Messages : 9 102
    Points : 28 387
    Points
    28 387
    Par défaut
    Citation Envoyé par Glumph
    Je voudrais obtenir une requête qui me sélectionne tous les champs de la table des Membres et qui me totalise le nombre d'albums postés et le nombre de photos postées. Alors j'ai écrit ça:
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    select `membres`.*,count(`albums`.`ID`) AS `nbAlbums`,count(`albums_photos`.`ID`) AS `nbPhotos`
    from `albums` left join `membres` on(`albums`.`AuteurID` = `membres`.`ID`)
    left join `albums_photos` on(`albums_photos`.`AuteurID` = `membres`.`ID`)
    group by `membres`.`Pseudo`;
    ...mais MySQL ne me liste que les membres ayant posté un album et pas ceux qui n'ont posté que des photos...
    Pouvez-vous m'expliquer mon erreur? Visiblement j'ai mal compris ce tutoriel... Merci!
    Ca marchera mieux comme ça
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    SELECT  `membres`.*
        ,   COUNT(`albums`.`ID`)        AS `nbAlbums`
        ,   COUNT(`albums_photos`.`ID`) AS `nbPhotos`
    FROM
            `membres` 
        LEFT JOIN 
            `albums` 
            ON  (`albums`.`AuteurID` = `membres`.`ID`)
        LEFT JOIN 
            `albums_photos` 
            ON  (`albums_photos`.`AuteurID` = `membres`.`ID`)
    GROUP BY
            `membres`.`Pseudo`
    ;
    Rappel de la théorie :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    SELECT  *
    FROM    A
        LEFT JOIN
            B
            ON  A.id = B.id
    ;
    Toutes les lignes de A et celles de B qui correspondent...

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    SELECT  *
    FROM    A
        RIGHT JOIN
            B
            ON  A.id = B.id
    ;
    Toutes les lignes de B et celles de A qui correspondent...


    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    SELECT  *
    FROM    A
        INNER JOIN
            B
            ON  A.id = B.id
    ;
    Seulement les lignes de B et celles de A qui correspondent...

  4. #4
    Modérateur
    Avatar de al1_24
    Homme Profil pro
    Retraité
    Inscrit en
    Mai 2002
    Messages
    9 102
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 63
    Localisation : France, Val de Marne (Île de France)

    Informations professionnelles :
    Activité : Retraité
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : Mai 2002
    Messages : 9 102
    Points : 28 387
    Points
    28 387
    Par défaut
    Est-ce ?

Discussions similaires

  1. Optimisation requête avec jointure externe SQL Server
    Par ICEMAN_60 dans le forum Développement
    Réponses: 2
    Dernier message: 28/11/2011, 10h08
  2. Opérateur MySQL jointure externe
    Par gdavin dans le forum Requêtes
    Réponses: 3
    Dernier message: 18/06/2008, 20h43
  3. [SQL] Jointure externe dans "les 2 sens"
    Par Bounty Killer dans le forum Oracle
    Réponses: 3
    Dernier message: 04/05/2006, 10h56
  4. [SQL] jointure externe
    Par Sniper37 dans le forum Langage SQL
    Réponses: 6
    Dernier message: 02/09/2005, 15h06
  5. [SQL] jointure externe avec 3 tables, comment faire ....
    Par grumbok dans le forum Langage SQL
    Réponses: 2
    Dernier message: 04/08/2005, 16h13

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