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

Oracle:如何筛选仅属于指定单一用户组的用户

解决方案

要筛选仅归属目标用户组(无其他组关联)的用户,核心是统计每个用户关联的组数量,只保留组数量为1且所属组为目标组的用户。以下是正确的查询语句:

SELECT u.USER_PK_ID
FROM USERS u
JOIN USER_GROUP_USER ugu ON u.USER_PK_ID = ugu.USER_PK_ID
WHERE u.ACC_ID = 200640
  AND u.DELETED = 'N'
GROUP BY u.USER_PK_ID
HAVING COUNT(DISTINCT ugu.GROUP_ID) = 1
   AND MAX(ugu.GROUP_ID) = 20064212;

逻辑说明

  1. 从USERS表筛选出指定ACC_ID且未删除的用户,关联USER_GROUP_USER获取他们的组关联记录。
  2. 通过GROUP BY u.USER_PK_ID按用户分组,统计每个用户关联的不同组数量。
  3. HAVING子句过滤:
    • COUNT(DISTINCT ugu.GROUP_ID) = 1:确保用户只关联了一个组
    • MAX(ugu.GROUP_ID) = 20064212:确保这个唯一关联的组就是目标组

之前查询的问题分析

你尝试的第二个查询逻辑存在错误:

SELECT DISTINCT (U.USER_PK_ID)
FROM USER_GROUP_USER U
JOIN USERS US ON US.USER_PK_ID = U.USER_PK_ID
WHERE GROUP_ID = 20064212
AND US.acc_id = 200640
AND US.DELETED = 'N'
AND GROUP_ID NOT IN (
    SELECT ID 
    FROM USER_GROUP
    WHERE acc_id = 200640
    AND ID != 20064212)

这里的GROUP_ID NOT IN (...)条件是对当前行的GROUP_ID做判断,但当前行已经通过WHERE GROUP_ID = 20064212限定了组ID,所以这个NOT IN条件永远成立,无法排除同时属于其他组的用户——因为这些用户在USER_GROUP_USER里会有其他组的记录,但你的查询只筛选了目标组的行,根本没考虑其他组的关联数据。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.07.31 22:35:19