我有3张桌子。出于本示例的目的,我将尽可能地简化它。
第一个表包含电影ID和名称,第二个表包含流派ID和流派名称(动作,戏剧等)。第3表存储与每部电影相关联的类型ID,因为某些电影具有多个电影。它有2列,genre_id和movie_id。童话简单的东西。我试图输出电影列表,以及与每部电影相关的类型列表。
SELECT *
FROM movies
LEFT JOIN gen_pairs
ON movies.mov_id = gen_pairs.gen_movieid
LEFT JOIN categories
ON gen_pairs.gen_catid = categories.cat_id
GROUP BY mov_id
这显然会输出每部电影的单一类型,即使它在gen_pairs表中有多个。如何为每部电影显示逗号分隔的流派列表,而不对每个项目运行子查询?
答案 0 :(得分:1)
你的选择应该构建笛卡尔积,所以你会得到像
这样的输出MovieA GenreA
MovieA GenreB
MovieB GenreA
...
但听起来你想要这个:
MovieA GenreA, GenreB
MovieB GenreA
...
MySQL有一个GROUP_CONCAT函数可以执行您想要的操作:
SELECT m.mov_id, GROUP_CONCAT(c.name)
FROM movies m
LEFT JOIN gen_pairs gp ON (m.mov_id = gp.gen_movieid)
LEFT JOIN categories c ON (gp.gen_catid = c.cat_id)
GROUP BY m.mov_id
注意GROUP_CONCAT和GROUP BY。