SQL多表关联求和查询:获取电影详情及对应总售票数
修正后的SQL查询语句(获取电影详情及总售票数)
先看看你原来的SQL语句里存在的几个关键问题:
- 关联
Sessions表时用了错误的连接条件:Movies.MovieID = Movies.MovieID,这根本没把两张表关联起来 - 关联
Tickets表时的条件错误:Movies.MovieID = Tickets.SessionID,Tickets的SessionID应该关联到Sessions的SessionID,而不是直接关联电影ID - 统计售票数用了
SUM(Tickets.SessionID),这是对SessionID求和,不是统计票数,应该用计数函数COUNT()
下面是修正后的查询语句,能正确关联表并统计每部电影的总售票数:
SELECT m.MovieID, m.Title, m.Released, m.Runtime, m.Classification, m.Plot, -- 补充原需求里的电影详细信息字段 COUNT(t.TicketID) AS TotalTickets FROM Movies m LEFT JOIN Sessions s ON m.MovieID = s.MovieID LEFT JOIN Tickets t ON s.SessionID = t.SessionID GROUP BY m.MovieID, m.Title, m.Released, m.Runtime, m.Classification, m.Plot ORDER BY m.Released;
关键修正点说明:
- 使用表别名(
m代表Movies,s代表Sessions,t代表Tickets)让语句更简洁易读 - 修正了表连接逻辑,确保
Movies→Sessions→Tickets的关联链正确 - 用
COUNT(t.TicketID)统计总售票数,LEFT JOIN确保即使没有售票记录的电影也会显示(总票数为0) - 补充了
Plot字段,满足"所有电影详细信息"的需求 - 按照SQL标准将所有非聚合字段加入
GROUP BY子句(如果你的数据库支持主键分组优化,只写m.MovieID也可以,但加上所有字段兼容性更好)
内容的提问来源于stack exchange,提问作者r92l30
相关产品推荐
相关产品推荐

