如何在MySQL中将子查询结果的行显示为一列?

7
我有三个表,分别是分类(Category)、电影(Movies)和关系表(RelCatMov)。 分类表(Category-table)
    categoryid, categoryName
1            thriller
2            supsense
3            romantic
4            action
5            sci-fi

电影表格
movieid, movieName
1            Avataar
2            Titanic
3            NinjaAssassin

RelCatMov-table

categoryid, MovieID
1            1
2            2
3            2
4            2
5            2

现在我想将记录显示为:
MovieName     Categories
Titanic    Suspense,Romantic,Sci-fi,action

如何做这件事。
我正在编写一个查询。
select MovieName,(select categoryname from category b,relcatmov c where b.categoryid=c.categoryid and c.movieid=a.movieid) as categories from movies a;

Error: Subquery returns more than one row!!!

如何将多行结果显示在一列中?
请帮忙!!!

为什么需要获取逗号分隔的值?这不是在关系型数据库中表示一对多映射的好方法。 - The Machine
也许是出于同样的原因,我需要它。为了创建优化的内存表示以进行简单搜索。与在数据库上使用另一个连接或线程相比,使用逗号分隔的文本搜索要快得多且更容易。 - Brian Boatright
1个回答

13

在Oracle中,它被称为stragg。在MySQL中,它是GROUP_CONCAT。

select MovieName,(select GROUP_CONCAT(categoryname) from category b,relcatmov c where b.categoryid=c.categoryid and c.movieid=a.movieid) as categories from movies a;

作为参考,您的问题在于MySQL希望您返回单个值,而您却返回了多行。


1
感谢您在回答中提到了“stragg”...这个问题在谷歌搜索“mysql stragg”时首先出现。 - Paul

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接