2012-01-04 2 views
2

Я не специалист по db, и это точно вопрос новичков.получить данные из базы видеоролика

У меня есть SQLite db, содержащий данные о фильмах.

Основная таблица (фильмы) содержит:

  • movie_id (автоинкрементного, первичная);
  • название;
  • год;
  • другие поля;

Тогда у меня есть актеров таблицу:

  • actor_id (автоинкрементного);
  • имя;
  • фамилия;

Тогда у меня есть литой стол:

  • movie_id (относящийся к таблице фильмов);
  • actor_id (относящийся к таблице актеров, например, Робин Уильямс);
  • character_name (имя персонажа, например «Mrs Doubtfire»);

В одном запросе я должен получить все символы данного фильма (на уровне приложения у меня есть идентификатор текущего фильма), имя и фамилия актера и список фильмов (! = этот фильм), где актер сыграл свою роль:

Character_name | Actor   | Other movies where we've seen this actor 
Mrs Doubtfire | Robin Williams | Mork & Mindy, Dead Poets Society, ... 
Other name  | Other actor | Related movies,... 

Возможно ли это? Как?

ответ

2

Try:

select max(c.character_name) character_name, 
     max(a.name) || ' ' || max(a.surname) actor, 
     group_concat(distinct m.title) other_movies 
from cast c 
join actors a on c.actor_id = a.actor_id 
left join cast omc on c.actor_id = omc.actor_id and c.movie_id <> omc.movie_id 
left join movies m on omc.movie_id = m.movie_id 
where c.movie_id = ? 
group by a.actor_id 
+0

Это похоже на работу, но мое невежество много вопросов :-) Один из них: почему «Макс»? –

+1

Это потому, что я группирую actor_id - в большинстве SQL (исключение MySQL), поле в сгруппированном элементе select должно быть либо агрегировано, либо включено в предложение group. В этом случае (поскольку имена все функционально зависят от actor_id), я * мог * добавить имена в предложение group, не затрагивая остальную часть запроса, но я нахожу, что яснее группировать только требуемые поля, что означает что я должен использовать агрегатную функцию для имен. –

+0

Марк, мне нужно много учиться, но ваш запрос - отличная отправная точка ;-) –

Смежные вопросы