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

tohng

Neuer Benutzer
Beiträge
3
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?
 
Werbung:
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 ...
 
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:
Werbung:
Zurück
Oben