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
相关产品推荐
相关产品推荐

