SQL查询筛选cr_number大于2记录失败,WHERE子句未生效问题求助
问题分析
你原查询存在两个核心问题:
- 缺失表关联逻辑:仅声明了主表
t_sup_supplier,没有写JOIN t_sup_cr就直接使用ON关联条件,属于基础语法错误 - 聚合结果过滤逻辑错误:
cr_number是分组后的聚合计算值,WHERE子句只能过滤分组前的原始数据,无法作用于聚合结果,需要使用HAVING子句实现这类过滤需求
修正后的查询语句
SELECT sup.sup_id, sup.sup_name_en AS name, COUNT(sup_cr.sup_id) AS cr_number FROM t_sup_supplier AS sup JOIN t_sup_cr ON sup_cr.sup_id_from = sup.sup_id GROUP BY sup.sup_id, sup.sup_name_en HAVING COUNT(sup_cr.sup_id) > 2;
补充说明
如果你的数据库支持在HAVING子句中引用SELECT中定义的别名(如MySQL、PostgreSQL较新版本),可以将HAVING条件简化为HAVING cr_number > 2;上述写法直接使用完整聚合表达式,兼容性更强,可适配所有标准SQL数据库。
内容的提问来源于stack exchange,提问作者Patryk
相关产品推荐
相关产品推荐

