我在postgres中有多对多的关系,即书籍和作者。作者可以有很多书,书籍可以有很多作者。 我还有一个只包含author_id和book_id的连接表。 为简单起见,假设我的authors表有一个id,full_name和我的books表有一个id,title。 这是一些示例数据。
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
我想要的是一个返回类似
的查询title |authors
---------------------------------
How to be terrible at SQL|Ben Hernandez,Another Person
现在我正在选择标题,作者使用所有三个表上的连接来给我这个:
title |full_name
---------------------------------
How to be terrible at SQL|Ben Hernandez
How to be terrible at SQL|Another Person
我正在使用javascript来构建一个带有结果的作者数组,这工作正常但是如果有人有办法在sql中执行此操作,我很乐意看到它。
谢谢!
答案 0 :(得分:3)
进行了一些谷歌搜索并最终弄清楚了这一点:
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;