MySQL: сложный вопрос с заданной схемой - PullRequest
0 голосов
/ 28 октября 2010

Вот схема:

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
)

1 Ответ

1 голос
/ 28 октября 2010

Так как это домашнее задание, вот подсказка ...

Если профессор преподавал все предварительные условия, то Pnum НЕ СУЩЕСТВУЕТ в подвыборке предварительных условий для курса класса, оставленного присоединенным к фактическим классам, которые профессор преподавал в данном термине, где фактический класс равен NULL (другими словами, если есть нет никаких предпосылок для преподаваемого класса, о котором не думали).

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...