在一行中选择一部电影及其所有类型

问题描述 投票:0回答:1

所以我有3个表:shows(pk: id)、show_genres(pk: id、fk: show_id、genre_id)、genres(pk: id)。

一个节目可以有多种类型,我需要全部采用。

我的桌子正在寻找现在看起来像这样的节目:

标题 流派
夏洛克 2016 犯罪
夏洛克 2016 纪录片

对于节目的每个流派,它会再生成一行,而不是仅添加第二个流派。

我的查询如下所示:

SELECT title, year, genres.name genres
FROM shows
LEFT JOIN show_genres ON shows.id=show_genres.show_id
LEFT JOIN genres ON show_genres.genre_id=genres.id

我尝试过 SELECT DISTINCT 和其他问题的其他建议。 另外,根据我的研究,我没有发现任何可行的方法。

关于我应该尝试什么或我做错了什么有什么建议吗?

sql postgresql
1个回答
1
投票

您应该单独使用

STRING_AGG
GROUP BY
来为每部电影获取一行,并将所有类型聚合在字符串中。您的查询将是这样的

SELECT 
    title, 
    year, 
    STRING_AGG(genres.name, ',') genres 
FROM shows 
LEFT JOIN show_genres ON shows.id = show_genres.show_id 
LEFT JOIN genres ON show_genres.genre_id = genres.id
GROUP BY title, year
© www.soinside.com 2019 - 2024. All rights reserved.