Oracle

如何選擇至少在 id = 1 的學生失敗的所有課程中失敗的學生?

  • December 5, 2018

我有以下表格:

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 將被返回,因為他們顯然失敗了至少與他們自己一樣多的課程,因此您可能希望將其過濾掉。

引用自:https://dba.stackexchange.com/questions/207658