2017-02-15 2 views
1

У меня есть начало заявления sql, где я должен найти всех актеров, которые играли в том же фильме, что и Том Хэнкс.Найти всех актеров, которые играли в том же фильме, что и Том Хэнкс

select a.name, m.title 
from actor a 
inner join character c 
inner join movie m 

on a.id = c.actor_id 
on c.movie_id = m.id 

where a.name = 'Tom Hanks' 

Однако этот код дает мне все названия фильмов, которыми играл Том Хэнкс, но не каждый актер.

Таблицы выглядеть следующим образом

Actor: 
    ID 
    name 

    Primary Key: ID  

Character: 
    Actor_ID 
    Movie_ID 
    Character 

    Primary Key: (actor_id, movie_id, character) 
    Foreign Key: actor_id references actor(id) 
    Foreign Key: movie_id references movie(id) 

Movie: 
    ID 
    Title 
    Year 
    Mpaa_rating 
    Audience_score 
    Critics_score 

    Primary Key: ID 

Я Мессинг вокруг некоторое время с различными подгруппами запросов и внутренние соединения, но не могу показаться, чтобы выяснить, что я делаю неправильно.

ответ

0

Разразившийся в подзапросы для простоты

-- get all actors that are in movies that tom hanks is in 
SELECT * 
FROM actor 
WHERE 
    actor_id IN 
    ( -- get all actor ids that are in movies that tom hanks is in 
     SELECT actor_id 
     FROM character 
     WHERE 
      movie_id IN 
      ( -- get all movies that tom hanks is in 
       SELECT movie_id 
       FROM character 
       WHERE 
        actor_id IN 
        ( -- get actor ids that equal tom hanks 
         SELECT id 
         FROM actor 
         WHERE name = 'Tom Hanks' 
        ) 
      ) 
    ) 
0

Я сделал ошибку раньше, требовался «в» не «=» Вы должны попробовать это тоже:

Select a.name, m.title 
From actor a, movie m, character c 
Where a.id = c.actor_id 
And m.id = c.movie_id 
And m.id in (select movie_id from character where actor_id = (select id from actor where name = 'the name')) 
Смежные вопросы