2017-05-12 3 views
-1

ID 444111110の学生が登録できるコースを取得します。 登録できるコースは、前もって履修したコースで、 の前提条件を満たしていなければなりません。両方のテーブルにSQLカラムの値が存在している必要があります

もちろん、学生の撤退も表示されなければならないので、再度登録することができます。グレード欄に「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'); を試みた。しかし、それは唯一のCS311を返す必要がありながら、それがID 444111110と学生のためのCS244とCS311を返します。 また、コースに登録していない学生、またはCS111である最初のコースのみを撤回した学生には、何も返されません。

生徒がそれらの一部ではないすべての前提条件のコースを受験したかどうかを確認する方法がありますか? があり、どのコースにも登録していない生徒のためにそのクエリを修正して、CS111を登録できることを示す方法はありますか?その前提条件はNULLですか?

ありがとうございます。

+0

http://meta.stackoverflow.com/questions/333952/why-should-i-provide-an-mcve-for-what-seems-to-me-to-be-a-very-simple- sql-query – Strawberry

+0

StackOverflowは宿題をする場所ではありません。あなたが正当な質問を最後に持っているかもしれないように見えます。あなたが持っている問題についてより具体的に編集してください。あなたの投稿に余分な情報があります。 – SandPiper

+0

それは宿題ではなく、私は自分自身でSQLをより良く学ぶための問題でした。私はこのデータベースをJavaアプリケーションと接続するためにゼロから作成しました。あなたはそれが宿題であると決めただけで、助けようとしなかっただけです。私は「余分な情報が多すぎます」という話題を作りました。専門家はデータベースの設計が悪いのかどうかを知ることができました。また、テーブルの中にスキーマとデータを持っているので、より明確になるでしょう。とにかく私の希望を失望させてくれてありがとう、私はすでに解決策を思いついて、誰かがそれを必要とするなら投稿した。 –

答えて

0
SELECT COURSE_ID,COURSE_NAME,SEATS_LEFT FROM Courses WHERE Course_ID NOT IN (
    SELECT Course_ID FROM prerequisite WHERE PREREQUISITE_COURSE_ID IN 
    (SELECT Course_ID FROM Courses WHERE Course_ID NOT IN 
    (SELECT Course_ID FROM Enrollment WHERE Student_ID = '444111110' AND GREADE NOT IN ('U', 'F', 'W')))) AND Course_ID NOT IN 
    (SELECT Course_ID FROM Enrollment WHERE Student_ID = '444111110' AND (GREADE = 'U' OR GREADE NOT IN ('F', 'W')) ); 

を試してみてください。

0

、私は私のために、この問題を解決するための私のインストラクターに感謝したいと思い、この

select course_ID, COURSE_NAME, SEATS_LEFT from Courses 
where course_ID in (select course_ID from Enrollment where grade ='W') 
or course id in (select course_id from Prerequisites where prerequisite_course_id in (select course_ID from Enrollment where grade != 'W') 
関連する問題