我有两个表:users和missionInfo。我只有在该类中的所有用户完成所有任务时才需要选择类。
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 :(得分: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上查看。
如果DISTINCT
仅在(userID,missionID)
表格中显示一次,则missionInfo
可以省略。
对于所有该类用户已完成的每项任务,内部查询返回classID
;外部人员将结果限制为只完成指定任务数量的那些人员。