1

users と missionInfo の 2 つのテーブルがあります。そのクラスにいるすべてのユーザーがすべてのミッションを完了した場合にのみ、クラスを選択する必要があります。

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

したがって、ユーザー 1 ~ 3 はすべてミッション 1 ~ 3 をすべて完了し、すべて同じクラスの一部であるため、classID 1 を取得する必要があります。

ヘルプ?

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で参照してください。

表に 1 回しか表示されない場合は、をDISTINCT省略できます。(userID,missionID)missionInfo

内部クエリはclassID、そのクラスのすべてのユーザーによって完了されたすべてのミッションに対して返されます。外側のものは、指定された数のミッションを完了したクラスのみに結果を制限します。

于 2012-05-01T16:17:52.423 に答える