两个表:
Exercises
---------
Exercise ID
1
ExerciseTargettedMuscles
------------------------
exerciseID muscleID
1 10
1 20
1 30
我需要抓住包含它所针对的所有肌肉的运动。 所以,如果练习a有 exerciseID = 1 并且 muscleIDs = 10,20和30 ,那么查询的结果应该是(至少) muscleIDs = 10,20和30 。
令我困惑的是多对多行比较。在我脑海中起作用的方法是确保主运动中不存在所选运动中不存在的肌肉。如何循环每一个以查看它是否不在选定的练习中?
答案 0 :(得分:0)
使用HAVING过滤您的结果,仅包含至少具有所需肌肉的结果:
select exerciseID
from ExerciseTargettedMuscles
where muscleID in (10, 20, 30)
group by exerciseID
having count(muscleID) = 3
3
应匹配肌肉数量。
WHERE为您提供具有任何所需肌肉的锻炼。然后将它们分组为每个练习一组。最后,HAVING用于仅包括那些拥有所有(而不仅仅是一些)肌肉的组。