2016-03-28 21 views
0

Postgreslerde kitap ve yazarlar arasında çok fazla ilişki var. Yazarlar birçok kitap ve kitaba sahip olabilir birçok yazar olabilir. Ayrıca, yalnızca author_id ve book_id öğelerini içeren bir birleşim tablom var. Basitlik için, yazarlarımın bir kimliği, tam_adı olduğunu ve kitap tablomun bir kimlik, başlık olduğunu varsayalım. İşte bazı örnek veriler.Postgresql'de satırları hizalama

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

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 

Ne istiyorum kullanarak yazar bana bu veriyor her üç tabloları katılır, Şu anda başlık seçiyorum bu

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

gibi bir şey döndüren bir sorgu

ve javascript kullanıyorum, sonuçlarla iyi sonuç veren bir dizi yazar oluşturmak için kullanıyorum, ancak birileri bunu sql'de yapmak için bir yol varsa, bunu görmek isterim.

Teşekkür ederiz!

cevap

3

mü biraz daha googling ve nihayet bu anladım:

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;