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

CS50 PSet7 Movies:嵌套SQL查询结果异常,仅返回4行而非19325行

嵌套SQL查询结果异常原因及修复

问题根源

你用=连接最内层子查询和stars表的movie_id,但SELECT id FROM movies WHERE year = 2004会返回多个电影ID(2004年不止一部电影),而=运算符只能匹配单个值,数据库只会取该子查询返回的第一个电影ID去关联stars表,最终只能查到对应这一部电影的演员,所以结果只有4行。

而JOIN语句会自动关联所有符合条件的记录,因此能得到正确的19325行结果。

修复后的代码

把最内层子查询前的=改成IN,让它匹配所有2004年的电影ID:

SELECT DISTINCT name
FROM people
WHERE id IN
(
    SELECT person_id
    FROM stars
    WHERE movie_id IN
    (
        SELECT id
        FROM movies
        WHERE year = 2004
    )
);

补充说明

也可以用JOIN写法保持逻辑清晰,效果和上面的修正版一致:

SELECT DISTINCT p.name
FROM people p
JOIN stars s ON p.id = s.person_id
JOIN movies m ON s.movie_id = m.id
WHERE m.year = 2004;

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.06.21 06:40:54