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
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
Plus court, plus simple à comprendre.