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

Oracle SQL技术问询:如何筛选仅属于特定组的ID

解决Oracle中筛选仅属于特定组的ID问题

嘿,我来帮你搞定这个筛选问题~你原来写的SQL为啥没生效呢?核心原因是每条记录的GroupID只能是单个值,同一行不可能同时满足GroupID = 11 AND GroupID = 12,所以这条语句永远不会返回结果。

要实现“同时属于组11、12且不属于其他任何组”的需求,我们可以用以下几种Oracle SQL写法:

方法一:分组聚合(最常用且高效)

通过GROUP BY ID对每个ID的分组情况做统计,用HAVING子句筛选符合条件的ID:

SELECT ID
FROM your_table_name -- 替换成你的实际表名
GROUP BY ID
HAVING 
  -- 统计该ID关联的不同组数量为2(刚好是11和12)
  COUNT(DISTINCT GroupID) = 2
  -- 确保这两个组是11和12
  AND SUM(CASE WHEN GroupID IN (11, 12) THEN 1 ELSE 0 END) = 2
  -- 确保没有关联其他组
  AND SUM(CASE WHEN GroupID NOT IN (11, 12) THEN 1 ELSE 0 END) = 0;

如果你的GroupID不会重复(同一个ID不会多次关联同一个GroupID),可以简化成:

SELECT ID
FROM your_table_name
GROUP BY ID
HAVING 
  COUNT(*) = 2
  AND MIN(GroupID) = 11
  AND MAX(GroupID) = 12;

这个简化版的逻辑是:ID只关联2个组,且最小组是11、最大组是12,那就意味着只有11和12这两个组。

方法二:关联查询+子查询排除

先找到同时关联11和12组的ID,再排除那些关联了其他组的ID:

SELECT DISTINCT t1.ID
FROM your_table_name t1
JOIN your_table_name t2 
  ON t1.ID = t2.ID
WHERE 
  t1.GroupID = 11
  AND t2.GroupID = 12
  AND NOT EXISTS (
    SELECT 1 
    FROM your_table_name t3 
    WHERE t3.ID = t1.ID 
      AND t3.GroupID NOT IN (11, 12)
  );

这几种方法都能正确筛选出ID=1,而排除ID=2(因为ID=2还关联了组13)。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.05.14 08:52:39