我是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
选择每个电影的所有流派名称用一个逗号分隔的字符串。