2013-04-25 4 views
0

안녕하세요. 과정을 수강하기 전에 모든 과정을 이수하 지 않은 모든 학생을 나열하는 쿼리를 만들려고합니다. 후속 과정을 치르기 전에 반드시 전제 조건을 통과해야합니다. 등록 된 연도는 학년입니다. 학년도 중에 가을은 봄이 오기 전에 가을입니다. 그래서 가을은 학교 시스템으로 인해 봄 전에옵니다. 아래 내 테이블뿐만 아니라 내 데이터베이스입니다. 나는 적절한 순서로 과정을 완료하지 않은 학생들을 선택하는 방법에 어려움을 겪고 있습니다. 즉 다음이 코드디코드를 사용하는 SQL 쿼리

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 
+2

내 시작이다 CID1 을 완료하기 전에 CID2 완료 "* 아래는 내 데이터베이스뿐만 아니라 내 테이블이다가. *"그것은 볼 좋을 것이다. –

+0

@ PM77-1 보이지 않는 텍스트를 읽을 수 없습니까? – Kermit

+1

@Stouny 페이지를 새로 고침 한 횟수는 중요하지 않습니다. 데이터베이스 및 테이블 **이 없습니다 **. – Kermit

답변

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))