2010-03-23 8 views
7

Ho tre tavoli Categoria, Film e RelCatMovCome visualizzare il risultato delle righe di sottoquery come una colonna in MySQL?

Categoria tavolo

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

Film-tavolo

movieid, movieName 
1   Avataar 
2   Titanic 
3   NinjaAssassin 

RelCatMov-tavolo

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

Ora voglio visualizzare un record come

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

Come fare questo.

Sto scrivendo una domanda

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

Come visualizzare il risultato di righe in una colonna?

Si prega di aiutare !!!

+0

Perché il requisito specifico (piuttosto strano) per ottenere valori separati da virgola? Non è un bel modo per rappresentare una mappatura da uno a molti in RDBMS. –

+0

forse per lo stesso motivo per cui ne avevo bisogno. Per creare un rep ottimizzato nella memoria per ricerche semplici. Molto più veloce e più facile fare una ricerca di testo di una virgola separata che usare un'altra connessione o thread sul database. –

risposta

10

In Oracle si chiama stragg. In 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; 

Per riferimento, il tuo problema è che MySQL si vuole restituire un singolo valore e si sta tornando più righe invece.

+0

Grazie per aver menzionato "stragg" nella tua risposta ... questa domanda è arrivata prima in una ricerca su Google per "mysql stragg". – Paul

-2

Per una simile esigenza in MS-SQL, ho scritto una funzione che mi restituisce una lista concatenata (stringa). Quindi puoi seguire questo approccio.

Problemi correlati