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

 Смежные вопросы

  • Нет связанных вопросов^_^