2012-05-01 55 views
1

我有兩個表:用戶和missionInfo。只有當所有在該班級的用戶完成所有任務時,我才需要選擇班級。MySQL:僅當用戶完成所有項目時才選擇用戶?

users table: 
userID classID 
1  1 
2  1 
3  1 
4  2 
5  2 

missionInfo table: 
userID missionID 
1  1 
1  2 
1  3 
2  1 
2  2 
2  3 
3  1 
3  2 
3  3 
4  1 
5  1 
5  2 

所以,我應該回去的classID 1,因爲用戶1通3全部完成了所有的任務1通3並且是同一類的所有部分。

幫助?

+0

聽起來很簡單。但是,如何確定一項任務是否已完成? –

+0

如果它在表格中,那麼它就完成了。 –

+2

你怎麼知道總共有多少次任務? – pilcrow

回答

1
SELECT classID FROM (
    SELECT classID 
    FROM  users JOIN missionInfo USING (userID) 
    GROUP BY classID, missionID 
    HAVING COUNT(DISTINCT userID) = (
    SELECT COUNT(*) FROM users u WHERE u.classID = users.classID 
) 
) AS t 
GROUP BY classID 
HAVING COUNT(*) = @total_number_of_missions 

請參閱sqlfiddle

如果(userID,missionID)只會在missionInfo表中出現一次,則可以省略DISTINCT

內部查詢返回classID對於所有班級用戶完成的每個任務;外部的結果只限於那些已經完成指定數量任務的班級。

+0

繁榮!搞定了!非常感謝! –

相關問題