MySQL:如果他们完成了所有项目,只选择用户?

时间:2012-05-01 15:54:19

标签: mysql

我有两个表: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,并且都属于同一个班级。

帮助?

1 个答案:

答案 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;外部人员将结果限制为只完成指定任务数量的那些人员。