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

为何微软Lab子查询方案正确,我的INNER JOIN查询结果重复?

为什么IN子查询返回唯一产品,而INNER JOIN返回重复记录?

微软方案正确的原因

微软的IN子查询逻辑是:

  1. 先从销售明细表中筛选出所有曾以UnitPrice<100售出的ProductID(即使同一个ProductID在子查询结果中出现多次,IN运算符会自动去重,只保留唯一值)
  2. 再在产品表中匹配这些ProductID,同时筛选出ListPrice≥100的产品
    最终返回的是符合条件的唯一产品记录,完全匹配任务“检索符合条件的产品”的要求。

你的JOIN查询存在的问题

你的INNER JOIN是将产品表与销售明细表做关联,每一条符合条件的销售记录都会对应生成一条产品记录。比如某产品有3次单价低于100的销售,就会返回3条该产品的结果,因此最终得到27条包含重复产品的记录——这是因为你没有对关联后的结果做去重处理,不符合任务要求的“唯一产品”目标。

修正后的JOIN写法

要得到和微软子查询一致的唯一产品结果,只需在查询中添加去重逻辑,两种常用方式:

方式1:使用DISTINCT

SELECT DISTINCT p.ProductID, p.Name, p.ListPrice
FROM SalesLT.Product p
JOIN SalesLT.SalesOrderDetail s ON p.ProductID = s.ProductID  
WHERE p.ListPrice >= 100.00
  AND s.UnitPrice < 100.00
ORDER BY ProductID;

方式2:使用GROUP BY

SELECT p.ProductID, p.Name, p.ListPrice
FROM SalesLT.Product p
JOIN SalesLT.SalesOrderDetail s ON p.ProductID = s.ProductID  
WHERE p.ListPrice >= 100.00
  AND s.UnitPrice < 100.00
GROUP BY p.ProductID, p.Name, p.ListPrice
ORDER BY ProductID;

以上两种写法都会返回7条唯一的产品记录,与微软的子查询结果一致。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.06.20 04:25:06