Что не так с этим оператором SQL для задачи 7 cs50? - PullRequest
0 голосов
/ 29 апреля 2020

Что не так с этим утверждением? Это не приводит к выводу.

select title from movies where id in 
(select movie_id from stars where person_id in 
(select id from people where name="Johnny Depp" intersect 
select id from people where name="Helena Bonham Carter"));

1 Ответ

1 голос
/ 29 апреля 2020

Этот оператор:

select id from people where name="Johnny Depp" 
intersect 
select id from people where name="Helena Bonham Carter"

возвращает общие результаты 2 запросов, но поскольку id является уникальным первичным ключом таблицы people, регистр не существует. что он вернет что-нибудь. Проще: если первый запрос возвращает 10, а второй возвращает 20, пересечение 10 и 20 не существует. Вы можете получить желаемый результат с помощью объединений:

select distinct m.title
from movies m
inner join stars s1 on s1.movie_id = m.id 
inner join stars s2 on s2.movie_id = m.id 
inner join people p1 on p1.id = s1.person_id and p1.name = 'Johnny Depp'
inner join people p2 on p2.id = s2.person_id and p2.name = 'Helena Bonham Carter'
...