2016-03-28 7 views
0

Ich habe eine viele zu viele Beziehung in Postgres, dass Bücher und Autoren ist. Autoren können viele Bücher haben und Bücher können viele Autoren haben. Ich habe auch eine Join-Tabelle, die nur die Autoren-ID und Buch-ID enthält. Der Einfachheit halber nehme ich einfach an, dass meine Autoren-Tabelle eine ID hat, full_name und meine Books-Tabelle eine ID, einen Titel hat. Hier sind einige Beispieldaten.Concaiting Zeilen in Postgresql

authors 
id|full_name 
------------ 
1|Ben Hernandez 
2|Another Person 

books 
id|title 
------------ 
1|How to be terrible at SQL 

book_author 
book_id|author_id 
----------------- 
     1|1 
     1|2 

Was ich möchte, ist eine Abfrage, die gerade jetzt so etwas wie dieses

title     |authors 
--------------------------------- 
How to be terrible at SQL|Ben Hernandez,Another Person 

kehrt I Titel bin Auswahl, Autor Joins auf allen drei Tabellen, die mir gibt diese:

title     |full_name 
--------------------------------- 
How to be terrible at SQL|Ben Hernandez 
How to be terrible at SQL|Another Person 

und ich benutze Javascript, um ein Array von Autoren mit den Ergebnissen zu bauen, die gut funktioniert, aber wenn jemand eine Möglichkeit hat, dies in SQL zu tun, würde ich es gerne sehen.

Vielen Dank!

Antwort

3

Haben einige mehr googeln und fand schließlich heraus, dies:

select books.title, string_agg(authors.full_name, ', ') from books 
    inner join book_author on book_author.book_id = books.id 
    inner join authors on book_author.author_id = authors.id 
group by books.title; 
Verwandte Themen