2010-03-23 2 views
7

Ich habe drei Tabellen Kategorie, Filme und RelCatMovWie wird das Ergebnis von Unterabfragenzeilen als eine Spalte in MySQL angezeigt?

Kategorie-Tabelle

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

Filme-Tabelle

movieid, movieName 
1   Avataar 
2   Titanic 
3   NinjaAssassin 

RelCatMov-Tabelle

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

Jetzt möchte ich als

MovieName  Categories 
Titanic Suspense,Romantic,Sci-fi,action 

Wie eine den Datensatz angezeigt werden, dies zu tun.

Ich schreibe eine Abfrage

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

Wie das Ergebnis der Zeilen in einer Spalte angezeigt werden?

Bitte helfen Sie !!!

+0

Warum die spezifische (eher seltsame) Anforderung, Komma getrennte Werte zu erhalten? Keine gute Möglichkeit, ein Eins-zu-viele-Mapping in RDBMS darzustellen. –

+0

vielleicht aus dem gleichen Grund, ich brauchte es. Um im Speicher optimierte Rep für einfache Suchen zu erstellen. Viel schneller und einfacher, eine Textsuche von Komma getrennt als eine andere Verbindung oder Thread in der Datenbank zu tun. –

Antwort

10

In Oracle heißt es Stragg. In MySQL ist es GROUP_CONCAT.

Als Referenz ist Ihr Problem, dass MySQL möchte, dass Sie einen einzelnen Wert zurückgeben und Sie stattdessen mehrere Zeilen zurückgeben.

+0

Danke für die Erwähnung von "stragg" in Ihrer Antwort ... diese Frage kam zuerst in einer Google-Suche nach "mysql stragg". – Paul

-2

Für eine ähnliche Notwendigkeit in MS-SQL, schrieb ich eine Funktion, die mir eine verkettete Liste (String) zurückgibt. So können Sie diesem Ansatz folgen.

Verwandte Themen