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ですか?
ありがとうございます。
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
StackOverflowは宿題をする場所ではありません。あなたが正当な質問を最後に持っているかもしれないように見えます。あなたが持っている問題についてより具体的に編集してください。あなたの投稿に余分な情報があります。 – SandPiper
それは宿題ではなく、私は自分自身でSQLをより良く学ぶための問題でした。私はこのデータベースをJavaアプリケーションと接続するためにゼロから作成しました。あなたはそれが宿題であると決めただけで、助けようとしなかっただけです。私は「余分な情報が多すぎます」という話題を作りました。専門家はデータベースの設計が悪いのかどうかを知ることができました。また、テーブルの中にスキーマとデータを持っているので、より明確になるでしょう。とにかく私の希望を失望させてくれてありがとう、私はすでに解決策を思いついて、誰かがそれを必要とするなら投稿した。 –