Oracle
如何選擇至少在 id = 1 的學生失敗的所有課程中失敗的學生?
我有以下表格:
STUDENT (student_id, first_name, last_name, birth_date, year , domain) PROFESSOR (professor_id, first_name, last_name, birth_date, hire_date, title, salary) COURSE (course_id, course_name, professor_id) GRADE (student_id, course_id, grade, date_of_exam)
我必須顯示至少在所有學生失敗的課程中
id = 1
失敗的學生。我嘗試了什麼:
SELECT s.student_id, s.first_name, s.last_name, n.grade, n.course_id FROM student s JOIN grade n ON n.student_id = s.student_id WHERE n.grade <= 4;
…這得到了所有失敗的學生,但我不知道如何從這個到所有失敗的學生,至少在所有學生失敗的課程中
id = 1
失敗。如果有人能指出我正確的方向,我將不勝感激!額外細節
例如:如果學生
id = 1
在課程中失敗了ids = 2,3
。我們還有另外兩名學生ids = 2,3
(如學生 1)在課程中失敗了,他們也可能在其他課程中失敗,那麼我想展示這兩名學生。
這是獲得所需結果的一種方法
SELECT * FROM STUDENT S WHERE NOT EXISTS (SELECT g1.course_id FROM GRADE g1 WHERE g1.student_id = 1 AND g1.grade <= 4 MINUS SELECT g2.course_id FROM GRADE g2 WHERE g2.student_id = S.student_id AND g2.grade <= 4)
對於每個學生,它檢查
MINUS
是否有任何 student_id = 1 失敗的課程不在關注的學生的失敗課程集中。如果沒有這樣的課程,則
NOT EXISTS
評估結果為真並返回學生。student_id = 1 將被返回,因為他們顯然失敗了至少與他們自己一樣多的課程,因此您可能希望將其過濾掉。