CS50 Pset7 Movies任务:如何从SQL查询结果中移除Kevin Bacon
解决CS50 Pset7 Movies中排除Kevin Bacon本人的问题
我正好做过这个任务,给你整理下修正后的查询和关键修改点:
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.id IN ( SELECT DISTINCT movies.id 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" ) AND people.name != "Kevin Bacon";
两个关键修改的原因:
- 添加
AND people.name != "Kevin Bacon":这是最直接的过滤方式,在主查询的WHERE子句末尾加上这个条件,就能直接把Kevin Bacon本人从结果中排除,比用NOT IN嵌套更简洁高效。 - 子查询中用
movies.id代替movies.title:电影标题可能存在重名的情况(比如不同年份的同名电影),用唯一的电影ID来匹配,能确保我们只筛选出1958年出生的Kevin Bacon真正参演过的电影,避免错误匹配到其他同名电影,让结果更精准。
之前你尝试用NOT IN没适配好嵌套结构,其实没必要绕那个弯,直接在主查询里加排除条件就搞定啦。
内容的提问来源于stack exchange,提问作者BurniesLeftovers
相关产品推荐
相关产品推荐

