CS50 Pset7 电影 - 13.sql

CS50 Pset7 Movies - 13.sql

我正处于此问题集的最后一步,在获取凯文·培根 (Kevin Bacon) 主演的电影中的主演姓名时遇到了问题。我把这段代码放在一起,它现在只产生一个名字,Steve Guttenberg。根据我在我的代码中的逻辑(我将包括注释)它应该给我所有的名字(是的,我知道 Kevin Bacon 本人最终不应该出现在这个列表中,但我试图一次解决一个问题时间)。

SELECT name  --Get name where the id is equal to the id in stars in the next step
FROM people
WHERE id = (
    SELECT person_id  --Get all the star's ids who are in the movies in which Kevin Bacon starred in
    FROM stars
    WHERE stars.movie_id = (
            SELECT movie_id  --Get all movie ids where Kevin Bacon starred in
            FROM stars
            Where stars.person_id = (
                SELECT id       --Get Kevin Bacon's ID
                FROM people
                WHERE people.name = "Kevin Bacon" AND birth = 1958)
                            )
            )

我不确定我的代码中哪里出现逻辑错误。还有其他人有类似的问题吗?提前致谢!

这个 SELECT movie_id --Get all movie ids 本质上是 returns KB 主演的 列表 电影。这里 WHERE stars.movie_id = ( 它需要 select "list" 中的所有 movie_id

同上 WHERE id = ( 它需要 select id person_id "list".

中的所有 id

您还可以采用变通方法嵌套表达式 WHERE ... IN。因此,您首先分离出 1958 年出生的凯文·贝肯 (Kevin Bacon) 主演的电影 ID。这样,您就可以访问与凯文一起出演电影的人物 ID。

然后,使用人员 table,您可以提取除 Kevin Bacon 之外的所有姓名。它看起来像这样:

SELECT name from people WHERE
id IN (SELECT person_id FROM stars WHERE
movie_id IN (SELECT movie_id FROM stars INNER JOIN people on stars.person_id = people.id
WHERE name = "Kevin Bacon" AND birth = 1958)) AND name != "Kevin Bacon";