Вот схема:
Student(Snum, Sname)
Course(Cnum, Cname)
Prerequisite(Cnum, Prereq)
Professor(Pnum,Pname, Dept, Office)
Enrollment(Snum, Cnum, Term, Section, Mark)
Schedule(Cnum, Term, Section, Days, Time, Room)
Class(Cnum, Term, Section, Instructor)
Полный вопрос:
Найти профессоров (Pnum, Pname, Dept), которые когда-либо преподавали курс в отношении класса,либо курс не имеет каких-либо предварительных условий, либо профессор также преподавал каждую из предпосылок курса.Профессор преподавал курс именно тогда, когда профессор преподавал урок (часть курса) в каком-то семестре.
Моя отправная точка до сих пор ...
SELECT * FROM Class c
LEFT JOIN Prerequisite p ON p.Cnum = c.Cnum
WHERE p.Cnum IS NULL
Iзнать, как найти курсы, преподаваемые профессорами, которые не имеют предварительных условий, и, следовательно, они удовлетворяют часть условия.Следующим шагом является выяснение того, научили ли они предварительным условиям, если таковые имеются.Кроме того, мой текущий запрос выбирает только одну предпосылку для каждого класса, когда для класса действительно может быть несколько предпосылок.
Примечание: Cnum и Prereq являются внешними ключами для Cnum
любая помощь!Это крепкий орешек.
РЕДАКТИРОВАТЬ: Я пришел с окончательным ответом!
SELECT prof.Pnum, prof.Pname, prof.Dept FROM Professor prof
WHERE prof.Pnum NOT IN
(
SELECT DISTINCT c.Instructor FROM Class c
RIGHT JOIN Prerequisite p ON p.Cnum = c.Cnum
LEFT JOIN Class cpre ON cpre.Cnum = p.Prereq AND cpre.Instructor = c.Instructor
WHERE cpre.Instructor IS NULL AND c.Instructor IS NOT NULL
)