我是MySQL的新手。我很难找到这个答案,但是我敢打赌,解决方案很简单。我有以下表格:

电影


movie_id
电影标题


con_genres(其他2之间的连接表)


movie_id
genre_id


体裁


genre_id
名称


我尝试了不同的查询,但一直得到这种结果

1 | Avatar | Sci-fi
1 | Avatar | Fantasy
2 | Matrix | Sci-fi
2 | Matrix | Fantasy (this one is non existent)


但我想要以下结果

1 | Avatar | Sci-fi, Fantasy
2 | Matrix | Sci-fi


通过1个查询获得此结果的最佳方法是什么?

最佳答案

没有运行它,但这应该可以工作:

SELECT m.movie_id, MIN(m.movie_title), GROUP_CONCAT(g.name)
FROM movies m
LEFT JOIN con_genres c ON c.movie_id = m.movie_id
LEFT JOIN genres g ON c.genre_id = g.genre_id
GROUP BY m.movie_id


这里的想法是连接三个表(这将产生与您的第一个示例结果类似的东西),对电影ID进行分组(显然,因为我们只希望每部电影一行),并使用GROUP_CONCAT选择每个电影的所有流派名称用一个逗号分隔的字符串。

10-04 20:18