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 回答