Prüfen ob Person einer Fortbildung absolviert hat

logan517

Benutzer
Beiträge
14
Hallo,

ich habe folgende Tabellen (sind nun nur zu Testzwecken nachgebaut)
Fortbildungstabellen.png
Die Tabellen + Beispielinhalte sind angegangen

Ich möchte gerne eine Liste an Personen und Fortbildungsarten angeben und dann soll mir gezeigt werden, ob die Personen zu einer dieser Fortbildungen angemeldet war (wenn mehrere vorhanden sind, dann immer das neuste Datum).
Also etwa so:
Code:
WHERE Personen.ID IN ('1','2')
AND FortbildungsArten.ID IN ('1','2','3','5')

Aussehen soll das dann so:
Fortbildungs-Result.png

Etwas haben ich das schon hinbekommen, allerdings fehlt mir noch die Filterung nach den Personen und dass bei den Fortbildungen immer nur die mit dem aktuellen Wert genommen wird.
Ich meine den Datensatz hier:
Fortbildung_doppelter_eintrag.png

Code:
SELECT *
FROM test.FortbildungsArten as FA
LEFT JOIN test.Fortbildungen as F
ON FA.ID = F.ArtID
LEFT JOIN test.Anmeldeliste as A
ON F.ID = A.FortbildungsID
LEFT JOIN test.Personen as P
ON A.PersonenID = P.ID

WHERE FA.ID IN ('1','2','3','5')

Könnt ihr mir dabei helfen, habt ihr ne Idee?

Grüße
 

Anhänge

  • Fortbildungstabelle.zip
    1,1 KB · Aufrufe: 0
Werbung:
Erstmal musst du klar stellen "von wo" du kommst. Also möchtest du primär eine Liste von Personen haben und, nur falls diese eine Ausbildung in einer Fortbildungsart haben, diese Information dazu joinen dann wäre ein LEFT JOIN richtig, es würde aber mehr Sinn ergeben mit Personen anzufangen. Umgekehrt (eine Liste von Fortbildungsarten und ggf. darin fortgebildete Personen) geht auch, dann lägst du schon nah dran.

Wenn dich nur beides im Zusammenhang interessiert, also sowohl Personen als auch Fortbildungarten, die keinen Treffer erzielen, nicht angezeigt werden sollen, dann solltest du mit INNER JOIN arbeiten. Einen der Filer kannst du dann auch direkt in der Join-Condition mit verwenden, also Personen.ID IN () oder FA.ID IN (), je nachdem, der andere kommt in den WHERE-Teil, das hast du ja auch schon.

Dann musst du noch gruppieren, GROUP BY ist dein Freund. Knifflig wird es, wenn du ein "bestanden" älteren Datums einem "nicht bestanden" neueren Datums vorziehen möchtest. Ist das relevant?
 
Zurück
Oben