所以我有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 和其他问题的其他建议。 另外,根据我的研究,我没有发现任何可行的方法。
关于我应该尝试什么或我做错了什么有什么建议吗?
您应该单独使用
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