私は次のテーブルを持っています:
Schools
Teachers
Courses
XRefSchoolsTeachers
XRefCoursesTeachers
今、私はそのコースを教えていない、そのコースが提供されている大学のすべての教師のリストを取得しようとしています。これまでのところ:
SELECT *
FROM Courses
INNER JOIN XRefSchoolsTeachers
ON Courses.SchoolID = XRefSchoolsTeachers.SchoolID
これにより、コースが提供されている学校のすべての教師のIDがわかりますが、ここで、のそのコースのIDに反しない教師のIDをすべて削除する必要がありますXRefCoursesTeachers
。別のリストにないものを削除する方法について、ここで別の質問を調べました。そのためには、左結合が必要です。しかし、私も内部参加が必要だと感じています。そうすれば、まだリストに載っていないその学校の教師だけを取得できます> <
例えば
SELECT *
FROM Courses
INNER JOIN XRefSchoolsTeachers
ON Courses.SchoolID = XRefSchoolsTeachers.SchoolID
LEFT JOIN XRefCoursesTeachers
ON (XRefCoursesTeachers.TeacherID = XRefSchoolsTeachers.TeacherID
AND XRefCoursesTeachers.CourseID = Courses.ID)
WHERE Courses.ID = ? AND XRefSchoolsTeachers.TeacherID IS NULL
他の学校の他のコースのすべての教師を私に与えます-私が望むものではありません。このコースを教えることができるが、そうではないすべての教師が欲しいです。
これは、結果を選択できるように、の内部結合と、同じ使用XRefCourseTeachers.CourseID = Courses.ID
インスタンスの左結合が必要なようなものです。しかし、私はこれを行う方法がわかりません。XRefCourseTeachers
TeacherID
NULL
これはどのように可能ですか?私は正しいアプローチを取っていますか?