2010-03-23 101 views
7

我有三個表範疇,電影和RelCatMov如何在MySQL中將子查詢行的結果顯示爲一列?

分類表

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

如何在一列中顯示的行結果如何呢?

請幫忙!!!

+0

爲什麼要獲得逗號分隔值的具體(相當奇怪)要求?在RDBMS中表示一對多映射並不是一個好方法。 – 2010-03-23 11:02:40

+0

也許出於同樣的原因,我需要它。爲簡單搜索創建優化內存代表。使用逗號分隔的文本搜索比使用數據庫上的另一個連接或線程更快,更容易。 – 2011-12-12 01:38:01

回答

10

在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希望你返回一個單一的值,而你要返回幾行。

+0

感謝您在回答中提及「stragg」......這個問題首先出現在Google搜索「mysql stragg」中。 – Paul 2013-06-03 19:36:37

-2

對於MS-SQL中類似的需求,我寫了一個函數,它返回一個連接列表(字符串)。所以你可以按照這個方法。