postgresql - 连接返回重复行
问题描述
我正在使用 Sakila 数据库学习 PostgreSQL。有一个名为 actor 的表,其中包含actor_id
,first_name
和last_name
。还有一张表,演员通过actor_id
andfilm_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 初学者问到,但我还没有看到一个有效的答案。
解决方案
您必须从以下位置删除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)
推荐阅读
- python - Django 数据库关系 - TypeError: 'ManyToOneRel' 对象不可迭代
- vba - 删除按钮上方的单行但不允许删除,如果
- python - 403 gmail api与python的权限不足
- c# - WPF 和棱镜:单选按钮选择在多个用户控件上消失
- selenium - 硒表计数
- java - 如何处理浏览器弹出窗口(使用 Selenium WebDriver)?
- python - 如何使用 Paramiko getfo 将文件从 SFTP 服务器下载到内存进行处理
- python - uwsgi+flask 启动|停止 python 守护进程
- r - 具有外生变量的 VAR 模型在 Shiny 中不起作用
- spring - Spring:允许缺少数据库连接