cs50 pset7 13.sql - 从结果中删除凯文

cs50 pset7 13.sql - remove kevin from results

更新:我能够通过改变两件事轻松简单地解决这个问题:

  1. 在代码末尾添加: AND people.name != "Kevin Bacon"
  2. 将嵌套查询更改为 movies.id 而不是标题。

感谢这个帖子的回答:

我正处于 PSET7 电影的最后一步 (https://cs50.harvard.edu/x/2020/psets/7/movies/) 目标输出应该是所有和凯文一起出演过电影的人,但不应该包括凯文本人。

我想查询 returns 与凯文·培根一起主演电影的所有人员姓名列表,但凯文在其中。 我怎样才能轻松地将他从结果中删除? 我已经研究过 NOT IN,但我无法弄清楚如何按照我设置的方式让它与嵌套查询一起使用。所以非常感谢任何建议。

这是我的代码:

SELECT DISTINCT people.name
FROM people
INNER JOIN stars ON stars.person_id = people.id
INNER JOIN movies ON movies.id = stars.movie_id
WHERE movies.title IN (
SELECT DISTINCT movies.title
FROM movies
INNER JOIN stars ON stars.movie_id = movies.id
INNER JOIN people ON people.id = stars.person_id
WHERE people.name = "Kevin Bacon" AND people.birth = "1958");

尝试

SELECT name 
FROM   people 
WHERE  id IN (SELECT DISTINCT person_id 
              FROM   stars 
              WHERE  movie_id IN (SELECT movie_id 
                                  FROM   stars 
                                         INNER JOIN people 
                                                 ON stars.person_id = people.id 
                                  WHERE  people.name = "kevin bacon" 
                                         AND people.birth = 1958)) 
       AND NOT ( name = "kevin bacon" 
                 AND birth = 1958 ); 

说明-

  • 第一SELECT所有movie_id“凯文培根”(1958年出生)出演过的
  • 现在 SELECT 所有 person_id 出演过上述电影的人
  • 现在SELECT所有这些人的名字
  • 最后,从这个结果中只排除“kevin bacon”(1958 年出生的人)