2011-10-01 12 views
0

兩個表相同:選擇練習,包括肌肉爲特定的行使(兩個表)

Exercises 
    --------- 
    Exercise ID 
    1 

ExerciseTargettedMuscles 
------------------------ 
exerciseID  muscleID 
    1    10 
    1    20 
    1    30 

我需要抓住的練習,包括所有它的目標肌肉。 所以,如果鍛鍊一個具有exerciseID = 1並且具有muscleIDs = 10,20和30,則查詢的結果應與(至少)muscleIDs = 10,20和30練習。

令我困惑的是多對多的行比較。我腦海中的工作方式是確保在主要練習中不存在不存在於選定練習中的肌肉。你如何循環每一個看看它是否不在選定的練習中?

回答

0

使用HAVING篩選結果只包括那些至少所需的肌肉:

select exerciseID 
from ExerciseTargettedMuscles 
where muscleID in (10, 20, 30) 
group by exerciseID 
having count(muscleID) = 3 

3應與肌肉的數量。

在哪裏給你有任何所需肌肉的練習。然後在每個練習中將它們分組爲一組。最後,HAVING被用來只包括那些擁有全部(而不僅僅是一些)肌肉的組。