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

为何这段查询2004年电影关联人员的SQL语句无法正常运行?

排查2004年电影关联人员查询SQL的问题

问题原因

  • 最内层子查询SELECT id FROM movies WHERE year = 2004会返回多个电影ID(2004年上映的电影不止一部),而movie_id =只能匹配单个值,这会直接触发子查询返回多行的错误。
  • 即便中间子查询只返回一个结果,SELECT person_id FROM stars WHERE movie_id = ...也可能返回多个关联人员ID,id =同样无法处理多行匹配的场景。

修正方案

方案1:用IN替代=,适配子查询多行返回的情况

SELECT * FROM people 
WHERE id IN (SELECT person_id FROM stars WHERE movie_id IN (SELECT id FROM movies WHERE year = 2004))
ORDER BY birth;

方案2:使用JOIN语句,逻辑更清晰且性能更优

SELECT DISTINCT p.* 
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
ORDER BY p.birth;

注:DISTINCT用于避免同一人员因关联多部2004年电影而重复输出。

内容的提问来源于stack exchange,提问作者148 Yousof Islam Moheb

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.08.20 20:48:19