eve*_*aug 5 mysql database many-to-many
我有3个这样的表:
电影:
类型:
movieGenres:
电影可以包括许多类型.
我想抓住电影片名,运行时和发行年及其类型.我怎么能在一个查询中做到这一点?
我试着这样做:
SELECT u.movie_title, u.movie_runtime, u.movie_releaseYear, a.genre_name
FROM movieGenres ua
LEFT JOIN movies u ON u.movie_id = ua.movieGenre_filmId
LEFT JOIN genres a ON a.genre_id = ua.movieGenre_genreId
LIMIT 0,10
Run Code Online (Sandbox Code Playgroud)
这返回类似于:
罗宾汉_ 101 _ 2001 _冒险
罗宾汉_ 101 _ 2001 _动作
罗宾汉_ 101 _ 2001 _戏剧
防火墙_ 98 _ 2003 _动作
防火墙_ 98 _ 2003 _剧情
我不想重复我已经知道的信息.我希望它显示如下:
罗宾汉_ 101 _ 2001 _冒险_动作_戏剧
防火墙_ 98 _ 2003 _动作_戏剧
请帮我搞清楚:)
SELECT
u.movie_title,
u.movie_runtime,
u.movie_releaseYear,
GROUP_CONCAT(a.genre_name) genre
FROM
movieGenres ua
INNER JOIN movies u ON u.movie_id = ua.movieGenre_filmId
INNER JOIN genres a ON a.genre_id = ua.movieGenre_genreId
GROUP BY
u.movie_title,
u.movie_runtime,
u.movie_releaseYear
LIMIT 0,10
;
Run Code Online (Sandbox Code Playgroud)
这本质上是您的查询。我刚刚添加了GROUP BY子句和GROUP_CONCAT函数。默认分隔符是逗号 (,)。如果您想要以空格分隔流派列表,请使用 GROUP_CONCAT 函数执行此操作:
SELECT
u.movie_title,
u.movie_runtime,
u.movie_releaseYear,
GROUP_CONCAT(a.genre_name SEPARATOR ' ') genre
FROM
movieGenres ua
INNER JOIN movies u ON u.movie_id = ua.movieGenre_filmId
INNER JOIN genres a ON a.genre_id = ua.movieGenre_genreId
GROUP BY
u.movie_title,
u.movie_runtime,
u.movie_releaseYear
LIMIT 0,10
;
Run Code Online (Sandbox Code Playgroud)