Précédent   Forum des professionnels en informatique > Bases de données > MySQL > Requêtes
Requêtes Forum d'entraide sur les requêtes MySQL
Partagez cette discussion sur d'autres réseaux sociaux : Viadeo Twitter Google Facebook Digg Delicious MySpace Yahoo
Réponse Proposer ce sujet en actualité
 
Outils de la discussion
Publicité
'
Vieux 29/05/2011, 23h16   #1
Nouveau Membre du Club
 
Inscription : février 2009
Messages : 261
Détails du profil
Informations forums :
Inscription : février 2009
Messages : 261
Points : 30
Points : 30
Par défaut Problème requête LEFT JOIN

Bonjour, j'ai un problème avec une requête SQL.

Voici mes 2 tables:
Code :
1
2
3
 
Activite:
id  nom  detail  idEtudiant
Code :
1
2
3
 
Etudiant
id  nom  prenom
Mes 2 tables sont en relations et je souhaiterais faire une requête SQL pour avoir le nom de chacun des étudiants avec le nombre d'activité qu'il possède.

J'ai donc fais:
Code :
1
2
3
4
5
 
SELECT e.id, e.nom, e.prenom, COUNT(a.id) AS nb
FROM Activite a,  Etudiant e
WHERE a.idEtudiant = e.id
GROUP BY e.id
Seulement, je n'obtiens que les étudiants qui possèdes des activités or, j'aurais également besoin de ceux qui n'en ont pas et je sais qu'il faut pour cela utiliser LEFT JOIN ou RIGHT JOIN.

J'ai donc modifié ma requête en:
Code :
1
2
3
4
5
 
SELECT e.id, e.nom, e.prenom, COUNT(a.id) AS nb
FROM Etudiant e, Activite a
LEFT JOIN Activite ON e.id = a.idEtudiant
GROUP BY e.id
J'obitiens l'erreur SQL comme quoi la colonne "e.id" est inconnue..

Qu'est-ce qui ne va pas svp?
absot est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 29/05/2011, 23h28   #2
Modérateur
 
Avatar de CinePhil
 
Homme Philippe Leménager
Ingénieur d'études en informatique
Inscription : août 2006
Messages : 11 004
Détails du profil
Informations personnelles :
Nom : Homme Philippe Leménager
Âge : 48
Localisation : France, Haute Garonne (Midi Pyrénées)

Informations professionnelles :
Activité : Ingénieur d'études en informatique
Secteur : Enseignement

Informations forums :
Inscription : août 2006
Messages : 11 004
Points : 18 265
Points : 18 265
Envoyer un message via MSN à CinePhil
Ce qui ne va pas, c'est que tu mélanges la syntaxe de jointures obsolète depuis 1992 (presque 20 ans quand même !) et la syntaxe normalisée depuis cette date !

Ta requête devient ceci :
Code :
1
2
3
4
SELECT e.id, e.nom, e.prenom, COUNT(a.id) AS nb
FROM Etudiant e
LEFT JOIN Activite a ON e.id = a.idEtudiant
GROUP BY e.id, e.nom, e.prenom
De plus, tu remarqueras au passage qu'il faut que toutes les colonnes du SELECT ne faisant pas l'objet de fonction d'agrégation figurent dans le GROUP BY.
__________________
Philippe Leménager. Ingénieur d'étude à l'École Nationale de Formation Agronomique.
Mon blog sur la conception des BDD, le langage SQL, le PHP avec Zend Framework...
« Ce que l'on conçoit bien s'énonce clairement, et les mots pour le dire arrivent aisément ». (Nicolas Boileau)
À la maison comme au bureau, j'utilise Mandriva Linux ou Mageïa ! Soutenons l'industrie logicielle française !
Linuxiens, comptez-vous !
CinePhil est actuellement connecté   Envoyer un message privé Réponse avec citation 00
Vieux 30/05/2011, 00h20   #3
Nouveau Membre du Club
 
Inscription : février 2009
Messages : 261
Détails du profil
Informations forums :
Inscription : février 2009
Messages : 261
Points : 30
Points : 30
Ca fonctionne, une révision SQl s'impose, merci.
absot est déconnecté   Envoyer un message privé Réponse avec citation 00
Réponse Proposer ce sujet en actualité Cette discussion est résolue.
Outils de la discussion



Fuseau horaire GMT +2. Il est actuellement 17h10.


 
 
 
 
Partenaires

Hébergement Web