1

我有两个表: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,并且都是同一个班级的一部分。

帮助?

4

1 回答 1

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该类的所有用户已完成的每个任务;外层将结果限制为仅完成指定数量任务的那些班级。

于 2012-05-01T16:17:52.423 回答