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

时间:2010-03-23 10:55:43

标签: mysql pivot

我有三个表分类,电影和RelCatMov

分类表

    categoryid, categoryName
1            thriller
2            supsense
3            romantic
4            action
5            sci-fi

影表

movieid, movieName
1            Avataar
2            Titanic
3            NinjaAssassin

RelCatMov表

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!!!

如何在一列中显示行的结果?

请帮助!!!

2 个答案:

答案 0 :(得分:12)

在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 :(得分:-2)

对于MS-SQL中的类似需求,我编写了一个函数,它返回一个连接列表(字符串)。所以你可以遵循这种方法。