我的SQL SELECT查询仅返回1条结果,原因是什么?
问题原因及解决方法
你的查询只返回1条结果,核心问题出在使用=来匹配子查询结果,这种写法要求子查询必须返回恰好1条数据,而你的嵌套子查询刚好每层都只返回1条:
- 最内层查询
SELECT id FROM movies WHERE year = 2004只查到1个2004年的电影ID,说明数据库里2004年的电影只有1部 - 中间层查询
SELECT person_id FROM stars WHERE movie_id = ...基于这个电影ID,只查到1个参演人员的ID,说明这部电影只有1个演员 - 外层查询匹配这个唯一的人员ID,自然只返回1条结果
如果你的需求是查询所有2004年电影的参演人员,应该把=换成IN,因为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;
也可以用JOIN写法,逻辑更清晰,还能避免重复数据(加DISTINCT):
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;
内容的提问来源于stack exchange,提问作者148 Yousof Islam Moheb
相关产品推荐
相关产品推荐

