SQL-запрос, три таблицы - PullRequest
1 голос
/ 02 июня 2011

Итак, давайте же я пытаюсь найти актеров, которые вместе снимаются в двух фильмах (для цели страницы с разделениями).У меня есть базы данных как таковые (это только некоторые составные данные):

актеры

id     first_name     last_name    gender
17     brad           pitt         m
2      kevin          bacon        m

фильмы

id     name               year
20     benjamin button    2008

роли

a_id    m_id     role
17      20       Mr. Benjamin Button

Поэтому я хочу вернуть названия фильмов, в которых участвуют оба актера. У меня есть имя и фамилия двух актеров.

У меня много проблем с тем, чтобы заставить это работать.В частности, у меня проблемы с частью SELECT

SELECT name FROM movies JOIN . . . 

Я начинаю со значений first_name и last_name для каждого

Ответы [ 3 ]

4 голосов
/ 02 июня 2011

Вы должны присоединиться дважды:

SELECT m.name movie_name
FROM movies m join roles r1 on
   r1.m_id = m.id join actors a1 on
   r1.a_id = a1.id join roles r2 on
   r2.m_id = m.id join actors a2 on
   r2.a_id = a2.id
WHERE
  a1.first_name = 'brad' and a1.last_name = 'pitt' and
  a2.first_name = 'kevin' and a2.last_name = 'bacon'

Показать все комбинации актеров для фильма:

SELECT m.name movie_name, a1.id actor1, a2.id actor2
FROM movies m join roles r1 on
   r1.m_id = m.id join actors a1 on
   r1.a_id = a1.id join roles r2 on
   r2.m_id = m.id join actors a2 on
   r2.a_id = a2.id
WHERE
  a1.id < a2.id

< гарантирует, что каждая комбинация сообщается только один раз.

1 голос
/ 02 июня 2011
select m.name,group_concat(concat_ws(' ',a.first_name,a.last_name) order by a.last_name) as actors
from actors as a
inner join roles as r on a.id = r.a_id
inner join movies as m on m.id = r.m_id
where r.a_id in (2,17)
group by r.m_id 
having count(r.a_id) = 2
order by m.name
0 голосов
/ 02 июня 2011

объявить @FirstActorID int, @SecondActorID int;

выбрать m. [Имя] из фильмов m внутреннее объединение [роли][role] r2 для r2.m_id = m.id и r2.a_id = @ SecondActorID

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...