查询supplies表中出现多次的供应商名称的SQL问题排查
SQL问题排查与修正方案
原代码错误点
- 缺少关联表声明:FROM子句仅指定了
supplier表,但WHERE条件中引用了supplies表的字段,没有定义两表的关联规则 - 字段拼写错误:
supplies.supplerNum存在笔误,正确字段名为supplierNum - 聚合规则缺失:使用
COUNT()聚合函数时未添加GROUP BY分组逻辑,无法按供应商维度统计出现次数,HAVING子句的过滤逻辑也无法正常生效
正确实现SQL
方案1:JOIN关联后分组过滤
适合需要同时展示供应商其他维度信息的场景:
SELECT s.name FROM supplier s INNER JOIN supplies sp ON s.supplierNum = sp.supplierNum GROUP BY s.supplierNum, s.name HAVING COUNT(*) > 1;
方案2:子查询先过滤再关联
性能更优,先在supplies表完成分组统计过滤,再关联取供应商名称:
SELECT name FROM supplier WHERE supplierNum IN ( SELECT supplierNum FROM supplies GROUP BY supplierNum HAVING COUNT(*) > 1 );
内容的提问来源于stack exchange,提问作者juniorMachado
相关产品推荐
相关产品推荐

