You need to enable JavaScript to run this app.
最新活动
大模型
产品
解决方案
定价
生态与合作
支持与服务
开发者
了解我们

如何使用Type 1嵌套查询查询订单数量大于100的产品?

使用Type 1嵌套查询列出订单数量大于100的产品

没问题,我来帮你一步步实现这个需求!咱们要做的是从PRODUCT表中筛选出总订单数量超过100的产品,正好用你提到的IN子查询(也就是Type 1嵌套查询)来完成。

实现思路拆解

按照你给出的公式SELECT column-names FROM table-name1 WHERE value IN (SELECT column-name FROM table-name2 WHERE condition),我们对应现有表结构拆解:

  • table-name1就是要取产品信息的PRODUCT
  • table-name2是存储订单明细的ORDER ITEM
  • 核心逻辑是:先通过子查询找出所有总订单量>100的产品ID,再用主查询匹配这些ID对应的产品信息

具体SQL实现

-- 主查询:获取符合条件的产品完整信息
SELECT PROD_ID, PROD_NAME, SUPPLIER_ID, UNITPRICE, PACKAGE, ISDISCONTINUED
FROM PRODUCT
-- 用IN子查询筛选符合订单量要求的产品ID
WHERE PROD_ID IN (
    -- 子查询:计算每个产品的总订单量,筛选出超过100的产品ID
    SELECT PRODUCTID
    FROM [ORDER ITEM]  -- 注意:带空格的表名需按数据库语法调整,比如MySQL用`ORDER ITEM`,Oracle用"ORDER ITEM"
    GROUP BY PRODUCTID
    HAVING SUM(QUANTITY) > 100
)

关键部分解释

  • 子查询逻辑:先对ORDER ITEMPRODUCTID分组,用SUM(QUANTITY)计算每个产品的累计订单数量,再通过HAVING子句(这里不能用WHERE,因为要筛选聚合后的结果)留下总数量大于100的产品ID。
  • 主查询逻辑:从PRODUCT表中选取所有需要的字段,通过PROD_ID和子查询返回的产品ID做匹配,最终得到所有符合订单量要求的产品信息。

小提示

如果你的数据库对带空格的表名有特殊语法要求,记得调整ORDER ITEM的写法:

  • SQL Server:用方括号包裹 → [ORDER ITEM]
  • MySQL/MariaDB:用反引号包裹 → `ORDER ITEM`
  • Oracle:用双引号包裹 → "ORDER ITEM"

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

火山引擎 最新活动