0

コースに登録できる残りの学生を見つけようとしています。これを行うには、現在アクティブな学生と現在コースに参加していない学生を見つける必要があります。クエリを実行すると空の結果セットが表示され続けるため、作成しているクエリは正しくないと思います。コースに登録できる残りの学生を見つけるにはどうすればよいですか?

以下は現在のクエリです。

SELECT  st.StudentId, StudentAlias, StudentForename, StudentSurname
FROM    Course c
        INNER JOIN Student_Course sc
            ON c.CourseId = sc.CourseId
        INNER JOIN Student st
            ON sc.StudentId = st.StudentId
WHERE   (c.CourseId = 1 AND
        sc.StudentId IS NULL
        AND st.Active = 1)
ORDER   BY st.StudentAlias

以下に表を示します。

生徒: (全生徒のリスト)

StudentId  StudentAlias  StudentForename  StudentSurname  Active
1          u09382        James            Smith           1
2          u83923        John             Brooks          1
3          u38292        Karen            Bradshaw        0
4          u20039        Chris            Cameron         1
5          u39399        Jane             Fields          1

コース: (すべてのコースのリスト)

CourseId  CourseNo  CourseName
1         INFO121   ICT
2         BUS122    Business and Finance
3         ENG432    English Language

Student_Course: (各コースに在籍する学生のリスト)

StudentId  CourseId
1          1
1          3
2          1
4          2
5          2

たとえば、 を選択した場合CourseId = 1、アクティブであるが明らかにそうではない学生を表示する CourseId = 1必要があります。つまり、コースへの登録の可能性のためにこれらの学生を以下に表示する必要があります。

4 - Chris Cameron
5 - Jane Fields
4

3 に答える 3

2

このクエリを試してください

SELECT s.studentId, s.Forename
FROM Student s
WHERE s.studentId NOT IN (SELECT studentId 
FROM  Student_Course c WHERE c.courseId = 1) AND s.Active = 1

内側のサブクエリは courseId =1 の学生を返し、外側のクエリでそれらの学生をフィルタリングします。

于 2013-03-01T11:04:14.823 に答える
1

これを試して

SELECT  st.StudentId, StudentAlias, StudentForename, StudentSurname
FROM    Course c
        INNER JOIN Student_Course sc
            ON c.CourseId = sc.CourseId
        INNER JOIN Student st
            ON sc.StudentId = st.StudentId
WHERE   (sc.CourseId <> 1
        AND st.Active = 1)
ORDER   BY st.StudentAlias
于 2013-03-01T10:59:12.900 に答える
0

コースに参加していないアクティブな学生を見つけるには、次のようにします。

SELECT  st.StudentId, StudentAlias, StudentForename, StudentSurname
FROM    Student st
LEFT OUTER JOIN Student_Course sc ON sc.StudentId = st.StudentId
LEFT OUTER JOIN Course c ON c.CourseId = sc.CourseId
WHERE   c.CourseId IS NULL
AND st.Active = 1
ORDER   BY st.StudentAlias

特定のコースに参加していない学生を確認したい場合は、

SELECT  st.StudentId, StudentAlias, StudentForename, StudentSurname
FROM    Student st
LEFT OUTER JOIN Student_Course sc ON sc.StudentId = st.StudentId
LEFT OUTER JOIN Course c ON c.CourseId = sc.CourseId AND CourseId = 1
WHERE   c.CourseId IS NULL
AND st.Active = 1
ORDER   BY st.StudentAlias

ON句にチェックするコースを入れる

于 2013-03-01T11:02:01.157 に答える