2013-11-13 5 views
0

Я искал правильный SQL для вопрос номер 13 в this учебник. Ни один из других вопросов не касается меня, просто № 13.Операция Select возвращает неверные результаты

По сути, вопрос заключается в том, чтобы узнать все фильмы, в которых сыграла «Джулия Эндрюс», и из этого результата выбрать актеров, которые играли ведущих актеров в этих фильмах. Звучит достаточно просто, но все, что я пытаюсь, терпит неудачу. Ниже перечислены:

select title, name from movie 
    join casting on movie.id=movieid 
    join actor on actorid=actor.id 
    where (name = 'Julie Andrews') 
    and ord=1 

выбирает фильмы, в которых она была, и она была ведущим актером. Мне нужны ведущие актеры для фильмов, в которых она была, а не фильмы, в которых она играла главную роль.

Есть ли у кого-нибудь предложения?

+0

Вот начало: Почему вы Выбор названия, название из фильма, если вы ищете для актеров? – Tobberoth

+0

Еще один намек - вам понадобится еще одна ссылка на 'actor', чтобы получить имена. Что вам нужно, чтобы присоединиться к нему? Что должно произойти, если в двух фильмах есть один и тот же ведущий актер/актриса (кроме Джулии Эндрюс)? –

+0

Вы уже знакомы с псевдонимами? Вы можете иметь два соединения в одной таблице и давать им разные псевдонимы - например, 'присоединяйся к кастингу как cast_julie в movie.id = cast_julie.movieid', а затем присоединитесь к casting как cast_mainactor на movie.id = cast_mainactor.movieid' –

ответ

0
select movie.title, actor.name 
from movie, actor, casting, (SELECT movieid from casting join actor 
on actor.id=casting.actorid where actor.name = 'Julie Andrews') JAM 
where movie.id = JAM.movieid and actor.id = casting.actorid 
and casting.movieid=JAM.movieid and casting.ord=1 
group by movie.title 
+0

Как насчет добавления' GROUP BY movie.title', а затем удалить 'DISTINCT'? –

+0

@ KevinSjöberg Да, это сделал трюк. Я отредактировал свой ответ. Но я пытаюсь выяснить, возможно ли исключить дублируемую запись только при подключении ... – neutrino

0

Попробуйте это:

select m.title, a.name 
from movie m 
join casting c on m.id = c.movieid 
    and ord = 1 
join actor a on a.id = c.actorid 
where exists (select * 
    from casting c2 
    join actor a2 on c2.actorid = a2.id 
     and a2.name = 'Julie Andrews' 
    where c2.movieid = m.id 
) 
Смежные вопросы