Ilja: SQL über 3 Tabellen mittels Join (mysql-db)

Beitrag lesen

moin,

+ID (int, Primary Key)
+Heim (int, Fremdschlüssel zur TeamID einer anderen Tabelle)
+Gast (int, Fremdschlüssel zur TeamID einer anderen Tabelle)
+ToreHeim (int)
+ToreGast (int)
+spieltag (int)

in der tabelle scheint ein design fehler vorzuliegen. ich würde nicht die fremdschlüssel der heim und gastmannschaft einbinden, sondern ganz direkt die namen der mannschaft. auch den namen der tabelle finde ich nicht treffend. letzlich handelt sich sich um spiele und nicht um spieltage. aber das nur am rande.

Egal wie ich die daten kombiniere, ich bekomme es nicht hin, dass für das spiel 38 von Spieler 2 auch ein datensatz (Nämlich NULL bei den Tipps) ausgegeben wird!

es gibt verschiedene möglichkeiten das zu lösen, zum beispiel mit deinem crossecheck in kombination mit mehreren korrelierten unterabfragen in der projektion oder aber mit joins und eine geschickt gewählten ON klausel. aber dazu muss erst mal ein anders problem gelöst werden. wenn du spiele in der datenbank hast, die über mehr als eine saison geht und nicht jeder user, der aktiv ist, schon bei einer älteren saison dabei war, dann brauchst du ein startdate für die user, ab wann sie mitspielen.

aber das ist alles durch den rücken in die brust geschossen. was du letzlich willst sind teilnahmen abbilden, sprich unabhängig davon, ob ein aktiver user einen tipp abgegeben hat oder nicht, hat er doch bei jedem saisonspiel eine teilnahme und diese solltest du auch persistieren. sprich ändere deinen tabellen namen von "spieltagtippen" in teilnahmen, persistiere dann für jeden aktiven spieler über die ganze saison seine teilnahmen und wenn er einen tipp abgibt, dann hat er werte in den attributen TippToreHeim und TippToreGast, ansonsten bleiben die spalten NULL. dann kannst du auch einen ganz normalen INNER JOIN über die drei tabellen machen.

Ilja