Bonjour à tous,
J'ai ce soucis (imaginons qu'il s'agisse d'examens),
trois tables (
examens avec primary key = idExamen,
eleves avec primary key= idEleve et
examenPassé avec les foreignkey idExamen et idEleve).
J'ai une table avec des personnes qui ont passé un (plusieurs) examens. Donc j'ai un identifiant pour la personne et un identifiant pour l'examen. Cet examen est constitué d'informations qui ne sont pas forcément toujours présente (par exemple la date d'un PV). Dans la table des examens toutes les informations sont identifiées par l'identifiant de l'examen ET un mot clé dans une seule et même colonne.
Par exemple
idLigne, idExamen, motClé, valeur
1,12, dateExamen, 01/01/2019
2,12, local, A151
3,12, datePV, 05/01/2019
4,15, dateExamen, 01/02/2019
5,15, local, B12
==>pas encore de date de PV
Donc on a un élève qui a passé l'examen 12 le 01/01/2019 dans le local A151 et à reçu son PV le 05/01/2019. Le même élève à passé l'examen 15 mais n'a pas encore reçu son PV.
Bon, je dois récupérer toutes les informations de chaque examen sur UNE ligne. Hors pour l'examen 15, il n'y a pas encore de date de PV. On n'a donc pas une valeur à NULL, on n'a juste pas de ligne.
J'ai essayé un truc de ce genre mais évidemment ça ne fonctionne pas:
Bien entendu j'ai testé le left join mais le problème ne vient pas de là, je n'ai juste pas de ligne avec le mot clé 'datePV' dans la table 'Examen'.
Code : Sélectionner tout - Visualiser dans une fenêtre à part
1
2
3
4
5
6
7
8
9 SELECT examenPasse.idEleve, t1.valeur, t2.valeur, t3.valeur FROM examenPasse JOIN examen t1 ON examenPasse.idExamen=t1.idExamen JOIN examen t2 ON examenPasse.idExamen=t2.idExamen JOIN examen t3 ON examenPasse.idExamen=t3.idExamen WHERE t1.motClé='dateExamen' AND t2.motClé='local' AND t3.motClé='datePV';
Au final, je veux obtenir une ligne pour chaque examen du genre
2, 01/01/2019, A151, 05/01/2019
2, 01/02/2019, B12, NULL
Merci de votre aide.
Partager