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

MS Access 2016查询:筛选仅含Iphone和Ipad两行数据的CompanyID

解决Access 2016中筛选仅含Iphone和Ipad的CompanyID问题

没问题,我来帮你搞定这个Access查询的需求!你提到的原SQL语句因为Access不支持USING语法所以无法运行,而且原语句还存在一个小缺陷——它只能找出同时包含Iphone和Ipad的公司,但没法排除那些还拥有其他产品的公司。下面给你两种可行的解决方案:

方法一:分组筛选(简洁高效)

这种方法直接通过分组和条件判断实现需求,逻辑清晰且适配Access语法:

SELECT CompanyID
FROM DATA
WHERE Product_Name IN ("Iphone", "Ipad")
GROUP BY CompanyID
HAVING COUNT(DISTINCT Product_Name) = 2 
   AND COUNT(*) = 2;

代码说明:

  • WHERE Product_Name IN ("Iphone", "Ipad"):先把数据范围缩小到仅包含目标产品的记录,减少后续计算量
  • GROUP BY CompanyID:按公司ID分组,方便统计每个公司的产品情况
  • COUNT(DISTINCT Product_Name) = 2:确保该公司同时拥有Iphone和Ipad两种产品(去重后数量为2)
  • COUNT(*) = 2:确保该公司的产品记录总数只有2条,也就是没有其他额外产品

方法二:自连接+子查询(兼容原思路)

如果你更倾向于用自连接的思路,可以把原语句的USING替换为Access支持的ON语法,再加上子查询过滤产品总数:

SELECT a.CompanyID
FROM DATA AS a
INNER JOIN DATA AS b ON a.CompanyID = b.CompanyID
WHERE a.Product_Name = "Iphone" 
  AND b.Product_Name = "Ipad"
GROUP BY a.CompanyID
HAVING (SELECT COUNT(*) FROM DATA WHERE CompanyID = a.CompanyID) = 2;

代码说明:

  • INNER JOIN DATA AS b ON a.CompanyID = b.CompanyID:替换原语句的USING,这是Access支持的显式连接写法
  • 子查询(SELECT COUNT(*) FROM DATA WHERE CompanyID = a.CompanyID) = 2:确保该公司的产品总数只有2条,排除有其他产品的情况

这两种方法都能准确筛选出像示例中CompanyID=4这样仅包含Iphone和Ipad的公司,你可以根据自己的习惯选择使用~

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

火山引擎 最新活动