2010-03-23 11 views
7

que tengo tres mesas categoría, Películas y RelCatMovCómo mostrar el resultado de las filas de subconsulta como una columna en MySQL?

Categoría mesa

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

Películas mesa

movieid, movieName 
1   Avataar 
2   Titanic 
3   NinjaAssassin 

RelCatMov mesa

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

ahora quiero mostrar un registro como el

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

Cómo hacer esto.

estoy escribiendo una consulta

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

Cómo mostrar el resultado de filas en una columna?

Por favor ayuda!

+0

¿Por qué el requisito específico (bastante extraño) de obtener valores separados por comas? No es una buena forma de representar una asignación de uno a muchos en RDBMS. –

+0

tal vez por la misma razón que lo necesitaba. Para crear optimizado en la memoria representante para búsquedas simples. Mucho más rápido y más fácil hacer una búsqueda de texto separada por comas que utilizar otra conexión o hilo en la base de datos. –

Respuesta

10

En Oracle se llama Stragg. En MySQL es 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; 

Como referencia, el problema es que MySQL que quiere devolver un solo valor y que está volviendo varias filas en su lugar.

+0

Gracias por mencionar "stragg" en su respuesta ... esta pregunta surgió primero en una búsqueda en Google de "mysql stragg". – Paul

-2

Para una necesidad similar en MS-SQL, escribí una función que me devuelve una lista concatenada (cadena). Entonces puedes seguir este enfoque.

Cuestiones relacionadas