3

私は次のテーブルを持っています:

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インスタンスの左結合が必要なようなものです。しかし、私はこれを行う方法がわかりません。XRefCourseTeachersTeacherIDNULL

これはどのように可能ですか?私は正しいアプローチを取っていますか?

4

2 に答える 2

1

解決策を見つけました:

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 
        XRefCoursesTeachers.TeacherID IS NULL
    AND
        Cousers.ID = ?
于 2012-09-19T12:28:07.783 に答える
1
SELECT *
FROM Courses
INNER JOIN XRefSchoolsTeachers
    ON Courses.SchoolID = XRefSchoolsTeachers.SchoolID
left join XRefCoursesTeachers
    on XRefCoursesTeachers.TeacherID = XRefSchoolsTeachers.TeacherID
where 
    XRefCoursesTeachers.TeacherID is null
    and
    Cousers.ID = ?

また

SELECT *
FROM Courses
INNER JOIN XRefSchoolsTeachers
    ON Courses.SchoolID = XRefSchoolsTeachers.SchoolID
where 
    XRefCoursesTeachers.TeacherID not in (
        select TeacherID
        from XRefCoursesTeachers
        where XRefCoursesTeachers.CourseID = Courses.ID
    )
    and
    Courses.ID = ?
于 2012-09-18T13:02:06.543 に答える