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




