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

SQL报错:Missing FROM Clause Entry,求修复年度最高评分影片查询

修复「Missing FROM Clause Entry」错误并实现每年最高评分影片查询

嘿,我来帮你搞定这个SQL的问题!你的报错主要有几个关键原因,咱们一步步来修复:

问题排查

  1. 缺少主查询语句:你定义了三个CTE(p_names、m、t),但最后没有编写主查询来调用这些CTE并返回结果,这是触发「Missing FROM Clause Entry」的核心原因。
  2. 保留关键字冲突:primary是SQL的保留关键字,直接用它作为列名会导致语法解析错误,必须转义处理。
  3. 未关联关键CTE:存储年度最高评分的m表和整合了影片信息的t表没有关联,没法筛选出对应年份的最高评分影片。

修复后的SQL代码

WITH p_names AS (
    -- 转义保留关键字primary,不同数据库转义方式不同:PostgreSQL用双引号,MySQL用反引号,SQL Server用方括号
    SELECT movie_id, name AS p_name 
    FROM movie_names 
    WHERE "primary" = true
),
m AS (
    SELECT year_released AS yr, MAX(rating) AS rating_max 
    FROM p_names 
    NATURAL JOIN movies 
    NATURAL JOIN ratings 
    GROUP BY year_released
),
t AS (
    SELECT p_name, year_released, rating, votes 
    FROM p_names 
    NATURAL JOIN movies 
    NATURAL JOIN ratings
)
-- 主查询:关联t和m,筛选出每年评分等于当年最高分的影片
SELECT t.p_name, t.year_released, t.rating, t.votes
FROM t
JOIN m ON t.year_released = m.yr AND t.rating = m.rating_max
ORDER BY t.year_released DESC;

关键修改说明

  • 对保留关键字primary进行转义:你可以根据自己使用的数据库调整转义方式,比如MySQL用`primary`,SQL Server用[primary]。
  • 添加了主查询:通过JOIN关联t和m,筛选出每个年份中评分等于当年最高分的影片,最后按年份倒序排列方便查看。
  • 保留了原有的CTE结构,同时补充了缺失的关联逻辑,确保能正确返回每年评分最高的影片数据。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.05.20 11:09:08