1. Willkommen im Forum für alle Datenbanken! Registriere Dich kostenlos und diskutiere über DBs wie Mysql, MariaDB, Oracle, Sql-Server, Postgres, Access uvm
    Information ausblenden

Prüfen ob Person einer Fortbildung absolviert hat

Dieses Thema im Forum "Microsoft SQL Server" wurde erstellt von logan517, 15 März 2019.

  1. logan517

    logan517 Benutzer

    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:

  2. ukulele

    ukulele Datenbank-Guru

    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?
     
Die Seite wird geladen...

Diese Seite empfehlen

  1. Diese Seite verwendet Cookies. Wenn du dich weiterhin auf dieser Seite aufhältst, akzeptierst du unseren Einsatz von Cookies.
    Information ausblenden