首页 > 解决方案 > 连接返回重复行

问题描述

我正在使用 Sakila 数据库学习 PostgreSQL。有一个名为 actor 的表,其中包含actor_id,first_namelast_name。还有一张表,演员通过actor_idandfilm_id组合映射到电影。

我希望以下查询为每个演员返回一行,其中该演员的 film_id 最大值,但我得到多行而不是一行(该演员的电影 ID 的最大值)。

SELECT actor.first_name, actor.last_name, MAX(film_actor.film_id)
FROM actor
LEFT JOIN film_actor ON film_actor.actor_id = actor.actor_id
GROUP BY film_actor.film_id, actor.first_name, actor.last_name
ORDER BY film_actor.film_id;

感谢您帮助理解如何使用连接来实现这一点(我已经有了使用子查询来实现这一点的解决方案)。

PS:我确信这个问题经常被 SQL 初学者问到,但我还没有看到一个有效的答案。

标签: postgresql

解决方案


您必须从以下位置删除film_actor.film_id

GROUP BY film_actor.film_id, actor.first_name, actor.last_name

因为您只想按演员分组。
所以改成这样:

GROUP BY actor.actor_id, actor.first_name, actor.last_name

我还添加actor.actor_id了以防万一有 2 个同名演员。
并将ORDER BY条款更改为:

ORDER BY MAX(film_actor.film_id)

推荐阅读