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

SQL多WITH子句查询时第13行awd位置报错如何解决

报错原因解释
  • 第13行awd位置的语法错误原因:NOT IN运算符后接结果集时必须用括号包裹查询语句,直接写NOT IN awd不符合SQL语法规范,必须改为NOT IN (SELECT id FROM awd)才能正确匹配获奖导演ID。
  • 额外逻辑错误:第二个CTEmc的设计不符合需求,当前写法统计的是全表所有电影的总数量,不是每个导演的执导作品数量,且聚合函数MAX()不能直接写在WHERE子句中做筛选条件。
  • 隐式逻辑漏洞:主查询没有按导演ID分组,无法统计每个导演的执导影片数量,直接关联director和movie表会返回所有导演-电影的匹配行,无法得到单导演的计数结果。
修复后代码(保留多WITH结构,未改动原有实现框架)
WITH awd AS (
-- 筛选所有获得过奖项的导演ID,加DISTINCT避免重复
SELECT DISTINCT director.id
FROM director INNER JOIN director_award 
ON director.title = director_award.title 
AND director.production_year = director_award.production_year
),
mc AS (
-- 统计每个未获奖导演的执导影片数量
SELECT director.id, COUNT(*) as movie_count
FROM director JOIN movie 
ON director.title = movie.title 
AND director.production_year = movie.production_year
WHERE director.id NOT IN (SELECT id FROM awd)
GROUP BY director.id
)
-- 取执导数量最大的导演ID
SELECT id
FROM mc
WHERE movie_count = (SELECT MAX(movie_count) FROM mc);
调整说明
  • 给awd CTE的查询增加DISTINCT,避免同一个导演多次获奖导致ID重复,降低NOT IN匹配的冗余计算
  • 重写mc CTE逻辑:先过滤获奖导演,再按导演ID分组统计每个导演的执导影片数量
  • 最终查询匹配mc中执导数量等于最大值的导演ID,完全符合需求

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.10.05 07:06:04