PostgreSQL查询多流派电视剧 实现多表关联及流派拼接咨询
完整查询语句
PostgreSQL 中对应 MySQL group_concat 功能的内置函数为 string_agg,结合三表关联的完整查询语句如下:
SELECT tl.id AS 电视剧id, tl.title AS 剧集名称, tl.episodes AS 总集数, string_agg(g."genre name", '、' ORDER BY g."genre name") AS 所属流派 FROM tvshow_list tl -- 关联中间表 LEFT JOIN genres_in_tvshows git ON tl.id = git."tvshow id" -- 关联流派表 LEFT JOIN genres g ON git.genreid = g.id -- 按剧集维度聚合 GROUP BY tl.id, tl.title, tl.episodes -- 可自定义排序规则,此处按上映年份倒序、名称正序排列 ORDER BY tl.year DESC, tl.title;
说明
- 关联逻辑采用左连接,即使某部剧集还没有标注任何流派,也会在结果中返回,对应流派字段为
NULL;如果只需要返回至少标注了1个流派的剧集,将两处LEFT JOIN替换为INNER JOIN即可 - 你给出的字段名包含空格(
genre name、tvshow id),PostgreSQL 查询带空格的字段必须用双引号包裹;如果实际建表时你已经将字段调整为下划线命名(genre_name、tvshow_id),直接去掉双引号写对应字段名即可 string_agg的第二个参数为拼接分隔符,可根据需求替换为逗号、斜杠等任意字符,函数内的ORDER BY可以控制流派的展示顺序
内容的提问来源于stack exchange,提问作者Jay
相关产品推荐
相关产品推荐

