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:

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';
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'.

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.