[英]MySQL: Select User Only If They Completed All Items?
我有两个表: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,并且都属于同一班级。
救命?
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
。 外层人员将结果限制为仅完成指定任务次数的班级。
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.