Bonjour à tous!
Je ne sais pas si c'est possible, mais je souhaiterais effectuer une double jointure externe.
Voici un exemple basique pour illustrer mon problème:
Il y a des CLASSE contenant des ELEVE (via ELEVE_CLASSE), chaque CLASSE à une liste d' EXERCICE (via CLASSE_EXERCICE).
Si on veut obtenir la liste des exercices à faire pour des les élèves d'une classe:
Maintenant il y a la table REALISATION (ID_ELEVE, ID_EXERCICE) contenant les exercices effectués par les élève.
Code : Sélectionner tout - Visualiser dans une fenêtre à part
1
2
3
4
5
6
7
8 SELECT [...] FROM ELEVE e, ELEVE_CLASSE ec, CLASSE c, CLASSE_EXERCICE ce, EXERCICE ex, WHERE c.ID_CLASSE = 10 AND e.ID_ELEVE = ec.ID_ELEVE AND ec.ID_CLASSE = c.ID_CLASSE AND ce.ID_EXERCICE = ex.ID_EXERCICE AND ce.ID_CLASSE = c.ID_CLASSE
Je souhaiterais obtenir la même liste que précédemment, mais en retirant les exercices défa effectués.
Ma première idée à été d'effectuer la première requête MINUS une seconde requête listant les exercices faite. Ca fonctionne.
Ma deuxième idée à été de faire une double jointure quui ressemblerait à quelque chose comme:
Évidemment, ça ne fonctionne pas en l'état... Ma question est donc: est-ce que c'est possible d'effectuer ce type de "double" jointure?
Code : Sélectionner tout - Visualiser dans une fenêtre à part
1
2
3
4
5
6
7
8
9 SELECT [...] FROM ELEVE e, ELEVE_CLASSE ec, CLASSE c, CLASSE_EXERCICE ce, EXERCICE ex, LEFT OUTER JOIN REALISATION r ON ( r.ID_ELEVE = e.ID_ELEVE AND r.ID_EXERCICE = ex.ID_EXERCICE ) WHERE c.ID_CLASSE = 10 AND e.ID_ELEVE = ec.ID_ELEVE AND ec.ID_CLASSE = c.ID_CLASSE AND ce.ID_EXERCICE = ex.ID_EXERCICE AND ce.ID_CLASSE = c.ID_CLASSE
Étant donné que ma solution avec MINUS fonctionne ce n'est pas bloquant pour moi, c'est plus pour ma culture personnelle!
Merci à vous!
Partager