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

如何用WHERE或JOIN编写SQL查询筛选拥有全部指定物料编号的企业

筛选同时拥有指定物料的企业的SQL方案

要解决这个「只保留同时拥有物料编号1、2、3的企业」的需求,这里有几种高效且易理解的SQL写法,都能精准获取你要的企业1的数据:

方法1:GROUP BY + HAVING(最常用的聚合筛选)

这个思路是先按企业分组,统计该企业拥有的目标物料的唯一数量,只有当数量等于3(也就是1、2、3全齐)时才保留。

SELECT COMPANY_ID
FROM #TmpTran
WHERE ITEM_NUMBER IN (1, 2, 3) -- 先缩小范围到目标物料
GROUP BY COMPANY_ID
HAVING COUNT(DISTINCT ITEM_NUMBER) = 3; -- 确保三个物料都有

注:如果你的数据里不会出现同一企业同一物料重复的情况,COUNT(DISTINCT ...)可以简化成COUNT(*),性能会更好。

方法2:多表JOIN(逻辑直观的匹配方式)

通过三次自连接,分别匹配物料1、2、3,只有同时满足三个连接条件的企业才会被筛选出来:

SELECT DISTINCT t1.COMPANY_ID
FROM #TmpTran t1
JOIN #TmpTran t2 ON t1.COMPANY_ID = t2.COMPANY_ID AND t2.ITEM_NUMBER = 2
JOIN #TmpTran t3 ON t1.COMPANY_ID = t3.COMPANY_ID AND t3.ITEM_NUMBER = 3
WHERE t1.ITEM_NUMBER = 1;

方法3:WHERE EXISTS子查询(逐条件校验)

用三个EXISTS子查询分别校验企业是否存在每个物料的记录,逻辑清晰,适合后续要添加更多物料条件的场景:

SELECT DISTINCT COMPANY_ID
FROM #TmpTran t
WHERE EXISTS (SELECT 1 FROM #TmpTran WHERE COMPANY_ID = t.COMPANY_ID AND ITEM_NUMBER = 1)
  AND EXISTS (SELECT 1 FROM #TmpTran WHERE COMPANY_ID = t.COMPANY_ID AND ITEM_NUMBER = 2)
  AND EXISTS (SELECT 1 FROM #TmpTran WHERE COMPANY_ID = t.COMPANY_ID AND ITEM_NUMBER = 3);

把以上任意一段SQL放到你的临时表环境中运行,都会只返回COMPANY_ID = 1的结果,完美符合你的需求。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.05.15 08:21:40