0

こんにちは、コースを受講する前に、そのコースの前提条件をすべて満たしていなくても、コースを受講したことのあるすべての学生をリストするクエリを作成しようとしています。フォローアップ コースを受講する前に、前提条件に合格する必要があります。在学年は学年です。学年内では、春の前に冬の前に秋が来ます。学校の制度上、秋は春より先に来ます。以下は私のデータベースと私のテーブルです。正しい順序でコースを修了していない学生を選択する方法に苦労しています。つまり、CID1 を完了する前に CID2 を完了しました。これがこのコードの始まりです。

SELECT student.FirstName, student.Lastname, Student.SID FROM student
INNER JOIN enrolled ON student.SID = enrolled.StudentID
INNER JOIN prerequisite p ON enrolled.courseID = p.CID
INNER JOIN prerequisite p1 ON enrolled.courseID = p1.CID2
WHERE p1.CID1 = True AND p.CID = FALSE
4

1 に答える 1

0
SELECT  a, d, ea.studentId,
        ea.quarter AS a_quarter, ea.year AS a_year,
        ed.quarter AS d_quarter, ed.year AS d_year
FROM    (
        SELECT  cid1 a, cid2 d
        FROM    prerequisite
        CONNECT BY
                cid2 = PRIOR cid1
        ) c
JOIN    enrolled ea
ON      ea.courseId = c.a
LEFT JOIN
        enrolled ed
ON      ed.courseId = c.d
        AND ed.studentId = ea.studentId
WHERE   ed.studentId IS NULL
        OR
        ed.year > ed.year
        OR
        (ed.year = ea.year AND DECODE(ed.quarter, 'fall', 1, 'winter', 2, 'spring', 3) > DECODE(ea.quarter, 'fall', 1, 'winter', 2, 'spring', 3))
于 2013-04-25T17:02:27.617 に答える