mysql - 使用 INNER JOIN、GROUP BY 和 LIMIT 进行选择

标签 mysql

我有一个关于电影的三个表。第一个是movie,第二个是actor,最后一个是movie_actor_mapping。我编写了一个查询,从表电影和每部电影的 Actor 组中选择数据。我的查询从 actor 表中选择所有 Actor ,但我必须只选择前 4 个 Actor 。我如何修改我的选择来做到这一点?

SELECT title, year, poster, rating, group_concat(a.name separator ', ') as actors
FROM movie m
INNER JOIN movie_actor_mapping ma ON m.movie_id = ma.movie_id
INNER JOIN actor a ON a.actor_id = ma.actor_id
WHERE m.rating IS NOT NULL
GROUP BY m.movie_id
ORDER BY m.rating DESC;

最佳答案

您可以通过 substringing group_concat 输出到前 3 个结果来破解它,例如:

select m.name as movie, substring_index(group_concat(a.name SEPARATOR ','), ',', 3) as actors
from movie m
join movie_actor ma on m.id = ma.movie_id
join actor a on ma.actor_id = a.id
group by m.id
order by m.id, a.id;

这将为每部电影提供 3 个 Actor 。

这是SQL Fiddle .

关于mysql - 使用 INNER JOIN、GROUP BY 和 LIMIT 进行选择,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/41047984/

相关文章:

mysql - 具有多个外键的键

php - 使用一个查询选择不同行上的多个字段

.net - 无法使用 .NET 连接器连接到本地 MySQL 数据库

php - mysql 在 utf8_general_ci 中区分大小写

MySQL。混合查询并仅显示结果一次

MySQL - 无法加载slow_log表

使用 group by 子句优化 MySQL 查询

mysql - 从不同的表中选择具有动态名称的行作为与articleId匹配的新表中的列名

php - 如何在PHP中推荐 friend

java - WHERE 阿拉伯语条件下的 SQL 查询