我有一个关于电影的三个表。第一个是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/