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