SQL-Abfrage-> Resultat = NULL

Hallo,
ich habe leider etwas komplizierteres. ich hoffe nur das ich es so erklären kann, dass man es ohne die Tabellen versteht.

also ich hab 4 Tabellen.

  1. tPerson
  2. tLN_Beurteilung
  3. tZeugnisNoten
  4. tUek_Beurteilung.

gut,… von den „Noten“-Tabellen werden jeweils die Noten von der Ausgewählten Person und von dem angegebenen Semester selectiert.

Jedoch, hat nicht jede Person in jedem Semester zu jedem Fach eine Note. also Beispiel.
Person 10, hat im 7 semester folgende Noten: (der Schnitt wird angegeben)
zeugnis: 5
LNBeurteilung: 5.16
tUKBeurteilung: NULL

eigentlich ist es kein Problem. mit Folgendem Select hab ich versucht die Infos zu finden.

select
avg(tZeugnisNoten.Note)as zNote,
AVG(tLN_Beurteilung.LN_Note)as lNote,
isNull(AVG(tUek_Beurteilung.Note), 0) as uNote
From tPerson left outer Join
tLN_Beurteilung
on tPerson.id = tLN_Beurteilung.Lehrling_id left outer join
tZeugnisNoten
on tPerson.id = tZeugnisNoten.Person_id left outer Join
tUEK_Beurteilung
on tPerson.id = tUek_Beurteilung.Person_id
WHERE tPerson.id = 10
and (tLN_Beurteilung.Semester = 7 OR tLN_Beurteilung.Semester IS NULL)
and (tZeugnisNoten.Semester = 7 OR tZeugnisNoten.Semester IS NULL)
and (tUek_Beurteilung.Semester = 7 OR tUek_Beurteilung.Semester IS NULL)

klingt eigentlich nicht schlecht…
aller dings sieht das Resultat nun wie Folgt aus:
zNote = NULL
lNote = NULL
uNote = 0

also nicht so das was ich wollte.
wie kann ich dieses Problem abfangen, also wenn in einer Tabelle eben eine Person in dem gesuchten Semester keine Note hat. Damit die anderen Resultate nicht gleich danaben sind…
mache ich die gleiche Selection, aber lasse die Semster abfrage weg,
erhalte ich die Resultate aber sie sind falsch, da sie nicht auf die Semester abgestimmt sind…

hoffe jemand hat noch ein mal eine Idee
bin langsam am verzweifeln…
ud hoffe ihr seid draus gekommen?!?

grüässli Häxli

Hallo.

Es ist ein Ei auf der Logikschiene :

and (x=7 OR x=Null)
and (y=7 OR y=Null)
and (z=7 OR z=Null)

gibt bei Deinem Select-Ansatz die Nulls mit aus. Ist also einer der Werte Null, bekommst Du in der ersten Auflösung z.B.

True AND Null AND True, was Null ist. Ergo Ergebnis Null.

Gruß Eillicht zu Vensre

Hallo.

Es ist ein Ei auf der Logikschiene :

and (x=7 OR x=Null)
and (y=7 OR y=Null)
and (z=7 OR z=Null)

Hallo

ja ich weiss das ein logisches Problem vorhanden ist…
jedoch… muss diese logik irgendwie so sein…
also ich meine…

er soll mir den notenschnitt von x ausgeben, von y und von z.
jedoch kann es nun sein das es in z keine note gab in diesem semester. also soll er mir eine NULL anzeigen,…
jedoch wenn in z gar nichts vorhanden ist, zeigt das NULL an jedoch zeigt er mir die anderen Informationen nicht mehr an.

Holla.

jedoch wenn in z gar nichts vorhanden ist, zeigt das NULL an
jedoch zeigt er mir die anderen Informationen nicht mehr an.

Habe ich doch begründet : NULL AND irgendwas ist NULL …

Du könntest - wenn Du die vollständige Neustrukturireung der Abfrage vermeiden willst, folgendermaßen vorgehen :

Join wie gehabt und für jeden Atomarzustand ein Flag setzen :

x vorhanden / nicht vorhanden
y vorhanden / nicht vorhanden
z vorhanden / nicht vorhanden

x = Null : Ausgabe 0
y = Null : Ausgabe 0
z = Null : Ausgabe 0

ABS(Flag) gibt jeweils 0 oder 1. Durchschnitt ist dann x*Flag x+y*Flag y+z*Flag z/(Flag x + Flag y + Flag z).Dann hast Du’s …

mir erschiene das aber zu komplizoren - ich würde auf eine Neustrukturierung der SQL mit SUBSELECTs setzen (falls Dein DBMS sowas kann).

Gruß Eillicht zu Vensre