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

如何统计外键数量并用于筛选排序主表?Oracle SQL查询问题

问题排查与解决方案

现有SQL错误点

  • 别名错误:内连接关联的是Vendor表,但ON条件中写了未定义的vend别名,触发invalid identifier报错
  • 聚合函数使用位置错误:COUNT(*)属于聚合函数,不能放在WHERE子句中做筛选,聚合结果的过滤需要用HAVING子句,触发group function is not allowed here报错
  • GROUP BY字段不匹配:Oracle要求SELECT子句中的非聚合字段必须全部出现在GROUP BY子句中,现有写法中SELECT的Vendor.vend_id没有在GROUP BY中声明,也会触发报错

正确查询语句

两种写法都可以实现需求:

写法1:先统计产品表供应商供货数再关联供应商表(性能更优,先过滤再关联)

SELECT v.vend_name
FROM Vendor v
INNER JOIN (
    SELECT vend_id
    FROM Product
    GROUP BY vend_id
    HAVING COUNT(prod_id) = 1
) p ON v.vend_id = p.vend_id;

写法2:关联后直接分组筛选

SELECT v.vend_name
FROM Product p
INNER JOIN Vendor v ON p.vend_id = v.vend_id
GROUP BY v.vend_id, v.vend_name
HAVING COUNT(p.prod_id) = 1;

说明:两种写法都用COUNT(prod_id)而不是COUNT(*),避免Product表存在prod_id为空的脏数据时统计结果出错,和「统计供应产品数」的需求逻辑完全匹配。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.10.05 16:36:04