Bonjour,
alors voilà je travaille sur un projet étudiant et je souhaiterais faire une certaine requête qui me pose un souci puisque j'arrive à obtenir les résultats voulu en passant par plusieurs requêtes mais j'aimerais pouvoir le faire en une seule.
Donc le problème porte sur 3 tables que je vais simplifier :
Entrainement(_CléEntrainement_, Nom)
Exercice(_CléExercice_, Intensité, CléEntrainement, CléDifficulté)
Difficulté(_CléDifficulté_, Couleur)
Ce que je souhaite obtenir c'est la couleur de la difficulté lié à l'exercice ayant l'intensité la plus élevé d'un Entrainement et le nom de cet Entrainement, et j'aimerais donc pouvoir faire ça sur chaque ligne d'Entrainement.
Pour l'instant j'arrive à peu près à quelque chose en faisant ça en plusieurs requête puis en automatisant et en faisant du passage de clé à l'aide d'un programme, mais je n'arrive pas à trouver une solution en une seule requête.
Pour l'instant je procède ainsi : une requête récupère les clés et nom des entrainements, puis pour chaque clé je fais une autre requête où je récupère l'Exercice.CléDifficulté de l'exercice ayant l'intensité maximal parmi ceux ayant pour CléEntrainement la clé récupéré avec la requête précédente, puis je fais une requête pour la Couleur avec la CléDifficulté récupérée à la requête précédente.
Je suis débutant en SQL, et j'ai beau réfléchir je ne vois pas trop comment faire. Avec des sous-requêtes j'arrive à "simplifier" les deux requêtes dernières requêtes en une seule mais c'est pas réellement utile et je ne pense pas que ce soit la bonne façon de faire.
Cordialement
EDIT :
Après avoir utilisé un peu ma tête j'ai pu arriver à cette solution
Plus court, plus simple à comprendre.
Code : Sélectionner tout - Visualiser dans une fenêtre à part
1
2
3
4
5
6
7
8 SELECT Entrainement.Nom, Difficulte.Couleur FROM Entrainement INNER JOIN Exercice on Entrainement.CleEntrainement = Exercice.CleEntrainement AND Exercice.CleExercice IN (SELECT Exercice.CleExercice FROM Exercice WHERE (exercice.CleEntrainement,Exercice.Intensite) IN (SELECT Exercice.CleEntrainement AS Entrainement, MAX(Exercice.Intensite) AS Maximum FROM Exercice GROUP BY Exercice.CleEntrainement )) INNER JOIN Difficulte on Exercice.CleDifficulte=Difficulte.CleDifficulte
Partager