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

Select Join Select Hilfe

Dieses Thema im Forum "MySQL und MariaDB" wurde erstellt von Jeziro, 23 Juni 2016.

  1. Jeziro

    Jeziro Neuer Benutzer

    Seit Tagen zermartere ich mir das Gehirn, wie ich eine Tabelle mit den gewünschten Informationen zusammenschustern kann. Ich bekomme es einfach nicht hin. Ich habe vier Tabellen, in denen sich Schülernamen, Schuljahresabschnitte, Fächernoten und Fächerbezeichnungen befinden:

    SCHUELER
    id | Name | Vorname
    -----+-----------------+-----------------
    193 | Müller | Maxine
    194 | Mustermann | Theo

    ABSCHNITT
    id | Schueler_ID | Jahr | Halbjahr
    ---+-----------------+-------+------------
    15 | 193 | 2014 | 1
    16 | 193 | 2014 | 2
    17 | 193 | 2015 | 1
    18 | 193 | 2015 | 2
    19 | 194 | 2014 | 1
    20 | 194 | 2014 | 2
    21 | 194 | 2015 | 1
    22 | 194 | 2015 | 2

    NOTEN
    id | abschnitt_ID | Fach_ID | Note
    ---+-----------------+-------------+------------
    89 | 17 | 103 | 2
    90 | 17 | 97 | 3+
    91 | 17 | 15 | 1
    92 | 17 | 17 |2
    93 | 18 | 103 | 1
    94 | 18 | 97 | 3
    95 | 18 | 18 | 1-

    FAECHER
    id | FachKrz | Fach_Bezeichnung
    -----+-----------------+--------------------------
    15 | D | Deutsch
    18 | EK | Erdkunde
    17 | GE | Geschichte
    97 | E | Englisch
    103 | M | Mathematik

    Ich möchte mir eine Tabelle folgender Form für alle Schüler zusammenstellen

    NOTEN2015
    schueler_id | Faecher_Abschitt12 | Note_Abschnitt1 | Note_Abschnitt2
    ---------------+-----------------------+-----------------------+------------------------+-------------------------
    193 | M | 2 | 1
    193 | E | 3+ | 3
    193 | D | 1 | leer
    193 | GE | 2 | leer
    193 | EK | leer | 1-

    Das besondere dabei ist, dass in Spalte 2 alle Faecher vorkommen sollen, die in Abschnitt 1 und 2 belegt wurden. In den Spalten 3 und 4 sollen die Noten zu den passenden Fächern stehen, sofern es eine Note zum Fach im Abschnitt gibt. Ich bekomme die Summe aller Fächer eines Schülers und die Leereinträge einfach nicht hin, da in der gesamten Datenbank natürlich zahlreiche Schüler mit allen möglichen Fächern und Noten tummeln. Beim Joinen bekomme ich nie das gewünschte Resultat.

    Hat jemand einen Tipp für mich.
     
  2. akretschmer

    akretschmer Datenbank-Guru

    Code:
    [local]:test=*# select schueler, fach, string_agg(abschnitt_1,'') as abschnitt1, string_agg(abschnitt_2,'') as abschnitt2 from (select s as schueler, f as fach, case when a_id=17 then note else null end as abschnitt_1, case when a_id=18 then note else null end as abschnitt_2 from (select s.id as s, f.id as f from schueler s cross join faecher f) x left join noten n on x.f=n.fach_id where x.s = 193) foo group by 1,2;
     schueler | fach | abschnitt1 | abschnitt2
    ----------+------+------------+------------
      193 |  15 | 1  |
      193 |  17 | 2  |
      193 |  18 |  | 1-
      193 |  97 | 3+  | 3
      193 |  103 | 2  | 1
    (5 rows)
    
    [local]:test=*#
    
    Die Fächerbezeichnungen da noch zu joinen überlasse ich Dir zur Übung.
     
  3. ukulele

    ukulele Datenbank-Guru

    Oder du machst 2 Joins, weniger elegant aber kann auch MySQL:
    Code:
    SELECT s.id,s.name,s.vorname,a1.*,a2.*
    FROM schueler s
    INNER JOIN abschnitt a1
    ON s.id = a1.schueler_id
    AND a1.jahr = 2015
    AND a1.halbjahr = 1
    INNER JOIN abschnitt a2
    ON s.id = a2.schueler_id
    AND a2.jahr = 2015
    AND a2.halbjahr = 2
    Dazu dann noch die Noten und Fächer jeweils zweimal joinen, ist eingentlich nur Fleißarbeit. MySQL kann diverse Dinge nicht die es einfacher machen würden.
     
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