実行したいSQLについて質問がありますが、その記述方法がわかりません。以下は、非常にダミーのデータを含むテーブルです。
モジュール:
ModuleId (PK auto) ModuleNo ModuleName
1 CHI2523 Business
コース:
CourseId (PK auto) CourseName
1 Business and Computing
2 ICT
3 Sports
Course_Module:
CourseId (PK) ModuleId (PK)
1 1
2 1
セッション:
SessionId (PK auto) SessionName ModuleId (FK)
3 DFRER 1
学生:
StudentId (PK auto) StudentAlias StudentForename StudentSurname CourseId (FK)
1 u03824 Bill Murphy 1
2 u38492 Conrad Jones 2
3 u48383 Jane Peters 1
4 u34322 Morgan Gray 2
5 u39292 Bilal Tuddy 3
Student_Session:
SessionId (PK) StudentId (PK)
3 1
3 2
クエリで見つけられるようにしたいのは、現在選択された評価を受けていないが、評価を受けることができる残りのすべての学生です。
したがって、これを実行できるようにするには、次のことを行う必要があります。
表を調べて
SessionId
、選択したセッションが何であるかを確認しますSession
表を参照して、
SessionId
所属するモジュールを確認してください。ModuleId
Session
テーブルを検索して、どのコースに参加しているかを確認
ModuleId
しますCourse_Module
テーブルの's
CourseId
と一致する学生テーブルを見て、各学生のコースを検索しますCourseId
Course_Module
モジュールが含まれているコースに属するすべての学生を表示しますが、現在セッションに参加していない(つまり
Session
、選択したを取得しているテーブルに含まれていない)学生のみを表示しSessionId
ます。
したがって、SessionId
選択したものが3の場合、出力する必要のある生徒は次のようになります。
StudentId (PK auto) StudentAlias StudentForename StudentSurname CourseId (FK)
3 u48383 Jane Peters 1
4 u34322 Morgan Gray 2
それの訳は:
SessionId
ModuleId
3は1に属しますModuleId
CourseId
1と2に属します1と2を見上げる
CourseId
と、そのコースを受講している4人の学生がいますただし、これらの生徒のうち2人は、テーブル
SessionId
を見るとすでに3Student_Session
人を受講しているため、現在セッションを受講していない他の2人の生徒のみを表示します。
私の質問は、上記の例を達成できるようにクエリをどのように作成するのかということです。私はクエリを開始しましたが、上記の例の繰り返しに適合するように、クエリを拡張するために誰かの助けが必要です。
SELECT s.StudentId, StudentAlias, StudentForename, StudentSurname
FROM Session s
INNER JOIN Module m ON m.ModuleId = s.ModuleId
INNER JOIN Course_Module cm ON cm.ModuleId = m.ModuleId
INNER JOIN Student s ON cm.CourseId = s.CourseId
INNER JOIN Student_Session ss ON s.StudentId = ss.StudentId
WHERE s.SessionId = 3
ORDER BY StudentAlias;
どの生徒が判読できないかを確認し、評価を受けるために判読できるが、現在評価に参加していない生徒のみを選択する方法がわかりません。