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

SQL语法错误咨询:WHERE关键字附近语法不正确及SQL语句排查

排查并修正你的SQL语法错误

首先,直接导致“关键字'where'附近有语法错误”的原因是SQL子句的顺序完全错了。SQL查询的标准书写(执行)顺序是:
SELECT → FROM → WHERE → GROUP BY → HAVING → ORDER BY
你把HAVING放在了WHERE前面,数据库引擎无法识别这种语法结构,所以直接抛出了语法错误。

除此之外,你的查询还有两个逻辑问题需要修正:

  • IN子句要求子查询返回单列数据,但你的子查询返回了SNo和Average两列,这会导致匹配逻辑失败。
  • 从语句意图来看,你可能是想先筛选出Qty在50-100之间的行,再对供应商分组计算平均值,最后筛选符合条件的分组?或者是想找出那些平均Qty属于所有供应商平均Qty集合的供应商?我会基于合理的业务意图给出修正方案。

假设你的需求是:找出所有供应商编号,这些供应商的Qty值都在50到100之间,并且他们的平均Qty值存在于所有供应商的平均Qty集合中

修正后的SQL语句如下:

SELECT SNo 
FROM Supplier 
WHERE Qty > 50 AND Qty < 100  -- 先筛选符合Qty范围的行
GROUP BY SNo  -- 按供应商分组
HAVING AVG(Qty) IN (
    SELECT AVG(Qty)  -- 子查询只返回平均Qty的单列数据
    FROM Supplier 
    GROUP BY SNo
);

如果你实际需求是:找出所有供应商,他们的平均Qty在50到100之间

那语句可以简化为:

SELECT SNo 
FROM Supplier 
GROUP BY SNo
HAVING AVG(Qty) > 50 AND AVG(Qty) < 100;

错误点总结

  • 子句顺序错误:WHERE必须在GROUP BY和HAVING之前
  • IN子查询列数不匹配:确保子查询只返回需要匹配的单列
  • 逻辑混淆:明确是要筛选单行数据(用WHERE)还是筛选分组结果(用HAVING)

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.05.07 11:08:11