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

如何用Oracle SQL查询使用指定组合供应商的门店主键ID

原SQL问题分析

你编写的SQL逻辑不成立:WHERE条件要求同一行的SupplierID同时满足等于001且等于002/003,但表中每行仅对应一个供应商ID,没有符合条件的行,因此没有返回结果。

正确Oracle SQL写法

以下三种写法都可以实现需求,返回你预期的123456、345678两个门店ID:

写法1:聚合分组(推荐,性能稳定,适合大数据量)

SELECT StoreID
FROM SUPPLIERS
WHERE SupplierID IN ('001', '002', '003')
GROUP BY StoreID
HAVING 
  -- 校验门店是否使用了001
  SUM(CASE WHEN SupplierID = '001' THEN 1 ELSE 0 END) >= 1
  -- 校验门店是否额外使用了002或003
  AND SUM(CASE WHEN SupplierID IN ('002', '003') THEN 1 ELSE 0 END) >= 1;

注:SupplierID为字符串类型,加单引号避免隐式转换丢失前缀0

写法2:集合交集(最简洁,可读性高)

-- 取「用了001的门店」和「用了002/003的门店」的交集
SELECT StoreID FROM SUPPLIERS WHERE SupplierID = '001'
INTERSECT
SELECT StoreID FROM SUPPLIERS WHERE SupplierID IN ('002', '003');

写法3:表自连接

SELECT DISTINCT s1.StoreID
FROM SUPPLIERS s1
INNER JOIN SUPPLIERS s2 
  ON s1.StoreID = s2.StoreID
WHERE s1.SupplierID = '001'
  AND s2.SupplierID IN ('002', '003');

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.10.02 15:36:06