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

Abfrage-Output, der eine Mehrfachverknüpfung horizontal statt vertikal anzeigt

Dieses Thema im Forum "MySQL und MariaDB" wurde erstellt von tohng, 12 Dezember 2019.

  1. tohng

    tohng Neuer Benutzer

    Hallo,

    ich bin neu und unerfahren in Datenbankdingen und hoffe hier auf einen Tipp für meine Abfragesyntax. Danke vorab für Eure Nachsicht...

    Ich habe eine Tabelle mit Publikationen und eine Tabelle mit Autoren.
    Viele Publikationen haben mehr als einen Autor, und ein Autor kann auch mehrere Publikationen schreiben.
    Daher gibt es noch eine MxM-Tabelle, die Publikationen und Autoren verknüpft.
    Meine Abfrage sieht so aus:

    Code:
    SELECT
    publication.uid, publication.title, person.last_name, person.first_name
    
    FROM publication
    
    LEFT JOIN publication_person_mm  ON publication.uid = publication_person_mm.uid_local
    LEFT JOIN person ON publication_person_mm.uid_foreign = person.uid
    Als Output erhalte ich für jede Publikation so viele Zeilen, wie sie Autoren hat.

    Mein Ziel ist es, als Output nur eine Zeile pro Publikation zu erhalten. Die Autoren sollten in dieser Zeile nacheinander stehen. So könnte ich leichter eine Publikationsliste erstellen.

    Statt
    Code:
    pub1, title1, autor11
    pub1, title1, autor12
    pub1, title1, autor13
    hätte ich gerne
    Code:
    pub1, title1, autor11, autor12, autor13
    Gibt es hierfür eine SQL-Abfragemöglichkeit?
     
  2. akretschmer

    akretschmer Datenbank-Guru

    ja, Du mußt die die Autoren-Spalte aggregieren (Du erhälst weiterhin eine Spalte, aber da die Autoren aggregiert) und die anderen 2 Spalten gruppieren. In PostgreSQL wäre die Aggregationsfunktion string_agg(text,text), in MySQL heißt sie irgendwie anderes ...
     
  3. tohng

    tohng Neuer Benutzer

    Herzlichen Dank, das hilft mir schon sehr weiter, jetzt weiß ich, wonach ich suchen muss :).
     
    akretschmer gefällt das.
  4. castorp

    castorp Datenbank-Guru

    group_concat() ist das in MySQL
     
  5. tohng

    tohng Neuer Benutzer

    Vielen Dank! Nach ein wenig Recherche und Probieren bin ich nun bei folgender funktionierender Abfrage angelangt:

    Code:
    SELECT publication_uid,
    GROUP_CONCAT (author_first_name, ' ', author_ last_name SEPARATOR '; ') AS "authors_list"
    FROM publication
    GROUP BY publication_uid;
    Nun habe ich neben der Tabelle Autoren noch zwei andere Tabellen (Abteilung, Forschungsgruppe), die ebenfalls MxM-Verknüpfungen mit der Tabelle Publikationen besitzen. Alle drei Tabellen sind unabhängig voneinander mit der Tabelle Publikationen verknüpft. Die Gruppierung läuft immer über die ID der Publikation.

    Kann ich die GROUP_CONCAT-Funktion "schachteln", sodass alle diese Aggregationen simultan in einer Abfrage erfolgen?
     
    Zuletzt bearbeitet: 13 Dezember 2019
  6. akretschmer

    akretschmer Datenbank-Guru

    falls ich die Frage richtig verstanden habe, ja.
     
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