2010-03-23 1 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

Почему конкретное (довольно странное) требование для получения значений, разделенных запятой? Не очень хороший способ отображать отображение от одного до многих в СУБД. –

+0

возможно по той же причине, в которой я нуждался. Создание оптимизированного представления памяти для простого поиска. Гораздо быстрее и проще выполнять текстовый поиск разделенных запятыми, чем использовать другое соединение или поток в базе данных. –

ответ

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

-2

Для аналогичной потребности в MS-SQL я написал функцию, которая возвращает мне конкатенированный список (строка). Таким образом, вы можете следовать этому подходу.