【发布时间】:2017-05-12 16:26:33
【问题描述】:
我想获取 ID 为 444111110 的学生可以注册的课程。 可以注册的课程是没有先决条件的课程或有 先决条件,他已经参加并取得了成绩。
课程也必须显示学生退学,以便他可以重新注册。它将在等级栏中给出“W” 不得显示学生修读的课程和他修读的课程。 如果他已经在学习这门课程,它将在成绩栏中显示“U”。
#COURSE_ID PREREQUISITE_COURSE_ID
CS111 NULL
CS211 CS111
CS244 CS311
CS244 CS211
CS244 CS111
CS311 CS211
CS311 CS111
# STUDENT_ID COURSE_ID DATEREGISTERED EnrollToken GREADE
444111110 CS111 2005-03-10 5 A
444111110 CS211 2005-03-10 7 A+
444111111 CS111 2005-03-10 6 W
# COURSE_ID COURSE_NAME TERM CREDITS_HOUR SEATS_LEFT
CS111 Intro. to CS 1 3 50
CS211 Intro. to PS 2 3 50
CS244 Adcanced Application 4 3 50
CS311 Introduction to OOB 3 3 50
我试过这个查询
SELECT DISTINCT C.COURSE_ID, C.COURSE_NAME, C.SEATS_LEFT
FROM ENROLLMENT E, PREREQUISITE P, COURSES C
WHERE C.COURSE_ID NOT IN (SELECT COURSE_ID FROM ENROLLMENT WHERE STUDENT_ID = '444111110' AND GREADE !='U')
AND P.PREREQUISITE_COURSE_ID IN
(SELECT COURSE_ID FROM ENROLLMENT WHERE STUDENT_ID = '444111110' AND GREADE !='W');
但它为 id 为 444111110 的学生返回 CS244 和 CS311,而它应该只返回 CS311。
对于没有注册任何课程或仅退出第一门课程即 CS111 的学生,它也不会返回任何内容。
有没有一种可能的方法来检查学生是否参加了所有的先修课程而不是其中的一部分? 有没有办法为没有参加任何课程的学生修复该查询,以向他们展示他们可以注册 CS111,其先决条件是 NULL?。
提前致谢。
【问题讨论】:
-
StackOverflow 不是为你做功课的地方。不过,看起来你最后可能有一个合理的问题。请对其进行编辑以更具体地说明您遇到的问题。您的帖子中有太多额外信息。
-
嗯,这不是家庭作业,这是我自己解决的一个问题,以便更好地学习 SQL,我从头开始创建了这个数据库,以便将它与 Java 应用程序连接起来。你只是决定这是家庭作业,你甚至没有试图帮助。我用“太多额外信息”作为主题,以便专家可以判断数据库的设计是否糟糕,也便于谁回答我,因为他得到了表中的模式和数据会更清楚。无论如何,感谢您让我失望,我已经想出了解决方案并在有人需要时发布。