You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

CS50 Pset7 movies任务:SQL查询结果不符问题求助

问题原因分析

你的查询结果比预期少,核心问题出在去重逻辑上:你用distinct name统计,会把同名的不同演员合并成一条记录,但这些是拥有不同person_id的独立个体,都符合“出演2004年电影”的条件,理应被分别计入结果。

举个实际场景的例子:数据库里可能存在两个都叫“John Doe”的演员,他们的person_id不同,且都参演了2004年的电影。你的count(distinct name)会把这两人算成1个,但实际上他们是两个独立的人,都应该被包含在结果里——这就是统计数比预期少的原因。

修正后的查询

要得到正确的18013条结果,你需要基于person_id(people表的唯一主键,每个ID对应唯一的人)去重,而非姓名。

验证正确数量的统计查询:

SELECT COUNT(DISTINCT people.id)
FROM people
JOIN stars ON stars.person_id = people.id
JOIN movies ON stars.movie_id = movies.id
WHERE movies.year = 2004;

符合任务要求的完整查询(列出姓名并按出生年份排序):

SELECT DISTINCT people.name
FROM people
JOIN stars ON stars.person_id = people.id
JOIN movies ON stars.movie_id = movies.id
WHERE movies.year = 2004
ORDER BY people.birth;

或者更严谨的写法(先通过子查询筛选出符合条件的演员ID,再关联取姓名):

SELECT people.name
FROM people
WHERE people.id IN (
    SELECT DISTINCT stars.person_id
    FROM stars
    JOIN movies ON stars.movie_id = movies.id
    WHERE movies.year = 2004
)
ORDER BY people.birth;

这两种写法都能返回正确的结果,因为它们都是基于唯一的person_id筛选演员,不会因为同名错误合并记录。

内容的提问来源于stack exchange,提问作者tarkin1

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.05.06 08:32:51