Musterlösung vom 08.06.2008:
-- Das aeussere select holt alle Studenten und bildet das Kreuzprodukt
-- mit allen relevanten Vorlesungsnummern. Das not exists schliesst dabei die
-- Tupel aus der Menge aus, die schon in hoeren enthalten sind, da das insert
-- sonst eine Fehlermeldung werfen wuerde.
insert into hoeren
select s.MatrNr, v.VorlNr
from Vorlesungen v, Professoren p, Studenten s
where v.gelesenVon = p.PersNr
and SWS = 4
and p.Name = 'Sokrates'
and not exists (select *
from hoeren h
where h.MatrNr = s.MatrNr
and v.VorlNr = h.VorlNr)
-- einfacher geht's mit 'ignore':
insert ignore into hoeren
select s.MatrNr, v.VorlNr
from Vorlesungen v, Professoren p, Studenten s
where v.gelesenVon = p.PersNr
and SWS = 4
and p.Name = 'Sokrates'