You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

SQL JOIN关联时如何为每个podcast仅从categories表取1条匹配记录

问题原因

你遇到的重复是因为一个podcast_id在categories表对应多条记录,关联后会把同一条评论复制成和分类数量相同的条数。用GROUP BY podcasts.title行不通的原因是分组后会把同一个播客的多条评论合并,无法保留全量评论记录。

解决方案

核心思路是提前对categories表做去重处理,保证每个podcast_id仅对应一条分类记录后,再和其他表关联,不会影响评论数据的完整性。

方案1:聚合函数提前取唯一分类

适合无特殊分类选取规则的场景,直接取每个播客的任意一条分类即可,示例用MAX取字母序最大的分类,你也可以换成MIN:

SELECT 
  podcasts.title AS podcast,
  c.category,
  reviews.review_title AS review,
  reviews.rating,
  reviews.author_id
FROM podcasts
LEFT OUTER JOIN reviews 
  ON reviews.podcast_id = podcasts.podcast_id
LEFT JOIN (
  SELECT podcast_id, MAX(category) AS category 
  FROM categories 
  GROUP BY podcast_id
) AS c 
  ON c.podcast_id = podcasts.podcast_id

方案2:窗口函数自定义分类选取规则

适合有明确分类选取优先级的场景,你可以修改窗口函数内的ORDER BY规则调整优先取哪条分类:

SELECT 
  podcasts.title AS podcast,
  c.category,
  reviews.review_title AS review,
  reviews.rating,
  reviews.author_id
FROM podcasts
LEFT OUTER JOIN reviews 
  ON reviews.podcast_id = podcasts.podcast_id
LEFT JOIN (
  SELECT 
    podcast_id, 
    category,
    ROW_NUMBER() OVER (PARTITION BY podcast_id ORDER BY category) AS rn
  FROM categories
) AS c 
  ON c.podcast_id = podcasts.podcast_id 
  AND c.rn = 1

内容的提问来源于stack exchange,提问作者Sergej

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.10.04 19:12:02