hilfe bei abfrage
-
hi
ich muss folgende abfrage machen:
Welche Studenten (Name und Matrikelnummer) hören zwar mindestens eine Vorlesung aber keine einzige 4-stündige Vorlesung?ich habe es mal so gemacht:
SELECT s.Name, s.MatrNr
FROM Studenten AS s, hören AS h, Vorlesungen v
WHERE h.MatrNr=s.MatrNr and v.VorlNr = h.VorlNr and v.SWS<>4;es gibt auch studenten die mehrere vorlesungen besuchen z.B. eine 2 stündige eine 4 stündige und eine 3 stündige.
jetzt müsste er mir ja diesen studenten zum beispiel nicht mit ausgeben weil der ja eine 4 stündige vorlesung hört. aber die wird mit ausgegeben weil er ja ein vorlesung hört die nicht 4 stündig sind.
meine frage ich kann ich das genau eingrenzen damit er mir den nicht anzeigt.
hoffe ich konnte mein problem einigermaßen erklärenoder kann mir einer das hier in sql umwandeln??
{[s.Name, s.MatrNr] | s ∈ Studenten
∃h ∈ hören (h.MatrNr = s.MatrNr
∃v ∈ Vorlesungen(v.VorlNr = h.VorlNr v.SWS ≠ 4))}
-
Ich glaube, dazu benötigst du schon eine verschachtelte Abfrage:
SELECT s.Name,s.MatNr FROM Studenten AS s, hören AS h, Vorlesungen AS v WHERE h.MatrNr=s.MatrNr AND v.VorlNr = h.VorlNr AND s.Mat NOT IN ( SELECT h2.MatNr FROM hören AS h2,Vorlesungen AS v2 WHERE h2.VorlNr = v2.VorlNr AND v2.SWS<>4 )