0

我有以下表格。SQL命令執行除法

STUDENT(ID, FIRST_NAME, LAST_NAME, MAJOR) 
INSTRUCTOR(ID, FIRST_NAME, LAST_NAME, DEPARTMENT, SALARY) 
COURSE(ID, COURSE_NAME, DESCRIPTION) 
COURSE_OFFERING(ID, COURSE_ID, INSTRUCTOR_ID, SEMESTER) 
GRADE(STUDENT_ID, COURSE_OFFERING_ID, GRADE) 

查找所有參加過愛因斯坦授課的所有學生的姓名。

,我使用的SQL命令是

select STUDENT_ID 
from grade where not exists 
    (select grade.COURSE_OFFERING_ID from grade 
    where grade.COURSE_OFFERING_ID not in 
      (
      select course_offering.ID 
      from instructor join course_offering 
      where instructor.ID = course_offering.INSTRUCTOR_ID 
      and instructor.FIRST_NAME = 'Einstein') 
      ); 

請解釋一下我在哪裏犯了一個錯誤,還是有在SQL執行部門的任何其他方式?

+0

我沒有看到任何分裂嗎?爲什麼你使用不存在,不在?你應該能夠使用單一的積極關係而不是兩個否定的關係。 –

+0

我必須找到所有課程的學生。所以它下屬權利?當我把它放在關係代數中時,首先我會找到愛因斯坦教授的課程,然後找到所有的學生,我需要以第一個結果來劃分。所以我想知道如何將關係代數劃分在SQL中? – mukund

回答

0

我覺得外部聯接這裏需要,像

select STUDENT_ID, count(*) cnt 
    from grade 
    left join course_offering c on COURSE_OFFERING_ID = c.ID 
    left join instructor i on INSTRUCTOR_ID = i.ID and i.LAST_NAME='Einstein' 
    where c.ID is NULL 
    group by STUDENT_ID 
    having cnt=0; 
+0

從技術上說,您需要學生姓名 - 因此請爲該學生加入 – noonex

+0

此查詢不返回任何內容。 – mukund