【问题标题】:cs50 pset7 13.sql - remove kevin from resultscs50 pset7 13.sql - 从结果中删除 kevin
【发布时间】:2020-07-19 03:15:33
【问题描述】:

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

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

感谢这个帖子的回答:CS50 Pset 7 13.sql, I can't solve it, nested sqlite3 database

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

我有一个查询,它返回与凯文培根一起出演电影的所有人物的名单,但凯文在那里。 我怎样才能轻松地将他从结果中删除? 我已经查看了 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");

【问题讨论】:

    标签: cs50


    【解决方案1】:

    试试

    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_ids “凯文培根”(出生于 1958 年)主演
    • 现在SELECT所有出演过上述电影的person_ids
    • 现在SELECT所有这些人的名字
    • 最后,从该结果中仅排除“kevin bacon”(出生于 1958 年)

    【讨论】:

    • 感谢您的支持,蔡斯!你的解决方案比我的要干净得多。我知道你实际上没有链接电影,只是使用了明星的电影 ID。聪明!
    猜你喜欢
    • 1970-01-01
    • 2023-04-06
    • 1970-01-01
    • 2022-12-06
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多