2015-04-16 2 views
1

У меня есть 3 таблицы (из sakila sample db): film, film_actor и actor.MySQL - вложенная конкатенация результатов

 
Film: (1000 rows) 

film_id | title | .... 
______________________ 
1  | a  | .... 
2  | b  | .... 
3  | c  | .... 
4  | d  | .... 
5  | e  | .... 
...................... 
 
Film_actor:(5000+ rows) 

actor_id | film_id | .... 
______________________ 
1  | 12  | .... 
1  | 33  | .... 
2  | 210  | .... 
3  | 2  | .... 
3  | 500  | .... 
...................... 
 
Actor:(~200 rows) 

actor_id | first_name | last_name 
__________________________________ 
1  | a   | f 
2  | b   | g 
3  | c   | h 
4  | d   | i 
5  | e   | l 
............................... 

Есть ли способ, чтобы получить результат, который выглядит следующим образом:

 

title(film)  | actors(first_name, last_name) 
_________________________________________________________________________ 
title 1   | first_name1 last_name1, first_name2 last_name2, etc..   
title 2   | first_name1 last_name1, first_name2 last_name2, etc.. 
title 3   | first_name1 last_name1, first_name2 last_name2, etc.. 
title 4   | first_name1 last_name1, first_name2 last_name2, etc.. 
title 5   | first_name1 last_name1, first_name2 last_name2, etc.. 
......................................................................... 

т.е. получение списка фильма заказанный ID со всеми актерами, играющие в фильме в вторая колонка.
Я уже проверял, но ответ на Stack Overflow, похоже, не соответствует моему вопросу со вложенной конкатенации.
Мне нужно получить этот результат только через запрос MySQL.

+0

Вы можете создать таблицу, подобную этой, используя комбинацию SQL и любой язык программирования, который хорошо работает с SQL, например php, довольно легко. –

+0

Да, мое плохое. Я забыл указать, что я пытаюсь получить этот результат через один запрос. Я знаю, что, используя php, это довольно просто, но это своего рода академическое упражнение. Благодарю. – MisterP

ответ

1
select `title`, group_concat(concat(first_name, ' ', last_name)) as actors 
from film inner join film_actor on film.film_id = film_actor.`film_id` 
inner join actor on film_actor.actor_id = actor.actor_id 
group by `title`