Grimm Hasuki: MS Access SQL: 1:n Beziehung in einer Zeile darstellen

Hallo,

Habe diese Frage schonmal (aber sehr sehr oberflächlich) gestellt.

Sagen wir ich habe zum Beispiel eine Tabelle Teilnehmer welche mit einer ID mit einer anderen Tabelle BestellteProdukte verknüpft wurde.

Tabelle "Teilnehmer" =

Id Name
1 Max Mustermann
2 Karl Müller
3 Linda Schuhmacher

Und eine Tabelle "BestellteProdukte" =

Id Bestellung
1 Toaster
1 Spühle
1 Hammer
3 Kühlschrank

Mein SQL wäre jetzt

SELECT Teilnehmer.*,BestelltePrukte.Bestellung
FROM Teilnehmer INNER JOIN BestellteProdukte ON Teilnehmer.ID = BestellteProdukte.ID;

Woraus ich diese Tabelle erhalten sollte.

ID Name Bestellung
1 Max Mustermann Toaster
1 Max Mustermann Spüle
1 Max Mustermann Hammer
2 Karl Müller
3 Linda Schuhmacher Kühlschrank
Das gewünschte Format wäre aber nur eine Zeile pro ID zu haben, also die verschiedenen Bestellungen welche auf die ID verknüpft wurden in einer Zeile darzustellen und diese mit z.B. "," zu separieren.
In diesem Format:
ID Name Bestellung
--- --- ---
1 Max Mustermann Toaster, Spüle, Hammer
2 Karl Müller
3 Linda Schuhmacher Kühlschrank
Die Frage wäre also ob dies in einem SQL in MC Access möglich ist und wenn ja wie 😀.
Verzeihung wenn ich etwas unverständlich aufgezeigt haben sollte(bin nicht oft auf solchen Foren unterwegs.)

akzeptierte Antworten

  1. Hallo Grimm,

    danke für die Klarstellung.

    (1) Für Karl Müller brauchst Du einen LEFT JOIN, keine INNER JOIN. Denn Du möchtest Sätze aus der linken Tabelle auch dann haben, wenn die rechte Tabelle keinen Eintrag hat.

    (2) Für die Kommaseparierung musst Du die Doku von MS Access (das meinst Du sicherlich, ich wüsste nicht was MC Access ist) durchflöhen, ob es dafür eine Funktion gibt. Standard-SQL ist das nicht, ich kenne keine solche Funktion.

    Rolf

    --
    sumpsi - posui - clusi
    1. Hallo Rolf,

      Danke erstmal für die Antwort, das mit dem Left Join löst schonmal eines meiner Probleme vielen Dank :D.

      Gäbe es denn dann eine Möglichkeit meine gewünschte Ansicht zu bekommen, wenn ich dies nicht in dem "MS Access SQL" sondern in einem "Standard-SQL" löse?

      1. Hallo

        Hallo Rolf,

        Danke erstmal für die Antwort, das mit dem Left Join löst schonmal eines meiner Probleme vielen Dank :D.

        Gäbe es denn dann eine Möglichkeit meine gewünschte Ansicht zu bekommen, wenn ich dies nicht in dem "MS Access SQL" sondern in einem "Standard-SQL" löse?

        In MS SQL (ab MS SQL Server 2017) und auch in MySQL (mindestens seit Version 5.5) gibt es die Funktion CONCAT_WS, die als Parameter angegebene Strings mit einem als erstem parameter angegebenen Separator zusammenfügt. Ob man die Parameterliste mit einer Abfrage füttern kann, wäre zu ermitteln.

        Tschö, Auge

        --
        Ein echtes Alchimistenlabor musste voll mit Glasgefäßen sein, die so aussahen, als wären sie beim öffentlichen Schluckaufwettbewerb der Glasbläsergilde entstanden.
        Hohle Köpfe von Terry Pratchett
        1. In MS SQL (ab MS SQL Server 2017) und auch in MySQL (mindestens seit Version 5.5) gibt es die Funktion CONCAT_WS, die als Parameter angegebene Strings mit einem als erstem parameter angegebenen Separator zusammenfügt.

          Ich würde eher direkt zu group-concat (mysql), STRING_AGG (mssql) bzw. string_agg (postgresql) greifen.

          1. Hallo

            In MS SQL (ab MS SQL Server 2017) und auch in MySQL (mindestens seit Version 5.5) gibt es die Funktion CONCAT_WS

            Ich würde eher direkt zu group-concat (mysql), STRING_AGG (mssql) bzw. string_agg (postgresql) greifen.

            Stümmt. Sieht beim ersten querlesen passender aus.

            Tschö, Auge

            --
            Ein echtes Alchimistenlabor musste voll mit Glasgefäßen sein, die so aussahen, als wären sie beim öffentlichen Schluckaufwettbewerb der Glasbläsergilde entstanden.
            Hohle Köpfe von Terry Pratchett
        2. Hallo Auge,

          CONCAT will einzelne Strings, aber du hast mich auf die Lösung gebracht.

          Was hier gebraucht wird ist eine Aggregationsfunktion. Und da bin ich bei GROUP_CONCAT fündig geworden

          Rolf

          --
          sumpsi - posui - clusi
          1. Hallo

            CONCAT will einzelne Strings, aber du hast mich auf die Lösung gebracht.

            Ich war mir beim „schnell mal“ suchen nicht sicher, ob die Funktion nicht auch eine Abfrage, die die Werteliste generiert, akzeptiert. IN kann das ja auch. Wenn sie das aber nicht kann, passt die Funktion natürlich nicht zur gestellten Aufgabe.

            Was hier gebraucht wird ist eine Aggregationsfunktion. Und da bin ich bei [GROUP_CONCAT]https://dev.mysql.com/doc/refman/5.6/en/group-by-functions.html#function_group-concat) fündig geworden

            erwin auch. 😀

            Tschö, Auge

            --
            Ein echtes Alchimistenlabor musste voll mit Glasgefäßen sein, die so aussahen, als wären sie beim öffentlichen Schluckaufwettbewerb der Glasbläsergilde entstanden.
            Hohle Köpfe von Terry Pratchett
            1. Hallo Auge,

              erwin auch

              das kommt davon, wenn man zu Antworten beginnt, währenddessen was anderes erledigen muss und dann sendet ohne nochmal nachzulesen ob einer reingegrätscht ist.

              Rolf

              --
              sumpsi - posui - clusi