Problème de choix de jointure

Problème de choix de jointure - SQL/NoSQL - Programmation

Marsh Posté le 02-07-2009 à 01:06:56    

Bonjour, je vous explique mon problème en version simplifiée:
 
Je fais un système de gestion de notes d'étudiants, et j'ai 3 tables (pour ce qui nous intéresse je simplifie volontairement les tables  / requêtes etc) :
 
etudiant (idEtudiant, Nom, Prenom, etc)
evaluation (idEvaluation, description, date etc)
note (idEtudiant, idEvaluation, Note, Deleted)
 
dans la table note, je dois enregistrer l'historique de ce qu'il s'est passé sur les notes, d'ou le deleted, qui contient NOW() au moment ou une note est "supprimée" (en fait elle ne l'est pas).
 
Ce que je cherche à faire :
 
Afficher tous les étudiants (idEtudiant) pour une évaluation donnée (idEvaluation), avec leur note si elle n'est pas "Deleted", NULL sinon
 
Pour le moment, j'ai ca :
 

Code :
  1. SELECT *
  2.    FROM etudiant
  3.    JOIN evaluation
  4.    LEFT JOIN note USING (idEvaluation, idEtudiant)
  5. WHERE (Deleted=0 OR Deleted IS NULL)


 
Mais ca ne marche pas car si un étudiant à une note Deleted (et pas de note non deleted), il n'est pas dans le resultat de la requete (ce qui est normal vu la construction de la requete).
 
Comment pourrais-je construire ma requete pour que ca fonctionne ?
 
D'avance merci pour le temps que vous allez me consacrer  :hello:


---------------
Gamertag : Getget94 - PSN : Getget1980 - Nintendo Network : Getget1980 - Uplau : Getget1980
Reply

Marsh Posté le 02-07-2009 à 01:06:56   

Reply

Marsh Posté le 02-07-2009 à 09:06:44    

getget a écrit :

Afficher tous les étudiants (idEtudiant) pour une évaluation donnée (idEvaluation), avec leur note si elle n'est pas "Deleted", NULL sinon
 
[...]
Mais ca ne marche pas car si un étudiant à une note Deleted (et pas de note non deleted), il n'est pas dans le resultat de la requete (ce qui est normal vu la construction de la requete).


 
Pas compris ce que tu cherches à faire. Ou plutôt je ne vois pas ce qui ne marche pas. Tu veux afficher ceux qui sont pas deleted donc ceux qui sont deleted tu ne les vois pas, normal non ?  :??:

Reply

Marsh Posté le 02-07-2009 à 09:34:53    

est ce qu'il ne faut pas mettre left devant les 2 joins (et pas seulement le second)?

Reply

Marsh Posté le 02-07-2009 à 09:43:39    

pataluc a écrit :

est ce qu'il ne faut pas mettre left devant les 2 joins (et pas seulement le second)?


j'crois que j'ai du dire une connerie.

 

en fait vu que le tri que tu veux faire n'est pas au niveau de la liste finale (clause where), mais au niveau du fonctionnement de la jointure, est ce qu'il ne faut pas que tu mette

 
Code :
  1. SELECT *
  2.    FROM etudiant
  3.    JOIN evaluation
  4.    LEFT JOIN note ON
  5.       etudiant.idEtudiant=note.idEtudiant
  6.       AND evaluation.idEvaluation=note.idEvaluation
  7.       AND (note.Deleted=0 OR note.Deleted IS NULL)
 

??

 


Message édité par pataluc le 02-07-2009 à 09:45:31
Reply

Marsh Posté le 03-07-2009 à 00:08:00    

Ca marche, je ne savais pas qu'on pouvait mettre une condition aussi développée dans un JOIN ;)


---------------
Gamertag : Getget94 - PSN : Getget1980 - Nintendo Network : Getget1980 - Uplau : Getget1980
Reply

Marsh Posté le 03-07-2009 à 10:48:11    

getget a écrit :

Ca marche, je ne savais pas qu'on pouvait mettre une condition aussi développée dans un JOIN ;)


moi non plus, mais je l'ai tenté qd même!  :whistle:

Reply

Sujets relatifs:

Leave a Replay

Make sure you enter the(*)required information where indicate.HTML code is not allowed