如何生成SQL查询以获取属于几个组而不属于其他组的用户列表
假设我们有一张这样的桌子如何生成SQL查询以获取属于几个组而不属于其他组的用户列表,sql,Sql,假设我们有一张这样的桌子 UserID | GroupID u1 | G1 u2 | G1 u3 | G2 u1 | G2 u1 | G4 u1 | G3 如何生成SQL查询以验证->用户“U1”是否在G1和G2中,但不在G4中” 这个逻辑可以是动态的。如果用户“U1”在G2而不是G3,那么->也可以是动态的 所以基本上我需要验证“logic”是否返回true或false,因为“logic”是这样记录的: 如果用户在(@Gr='gr1'或@Gr='gr2')和@Gr'gr3'中,则返回用户。
UserID | GroupID
u1 | G1
u2 | G1
u3 | G2
u1 | G2
u1 | G4
u1 | G3
如何生成SQL查询以验证->用户“U1”是否在G1和G2中,但不在G4中”
这个逻辑可以是动态的。如果用户“U1”在G2而不是G3,那么->也可以是动态的
所以基本上我需要验证“logic”是否返回true或false,因为“logic”是这样记录的: 如果用户在
(@Gr='gr1'或@Gr='gr2')和@Gr'gr3'中,则返回用户。
希望我解释得对:)希望,我正确理解了你的问题 请检查下面的查询,如果您定义了组的数量,则可以使用此查询, 根据需要改变where条件 e、 g.
验证->是否为用户“U1”在G1和G2中,但不在G4中
select * from
(
select UserID,
sum(case when GroupID = 'G1' then 1 else 0 end) g1_sum,
sum(case when GroupID = 'G2' then 1 else 0 end) g2_sum,
sum(case when GroupID = 'G3' then 1 else 0 end) g3_sum,
sum(case when GroupID = 'G4' then 1 else 0 end) g4_sum
from
table
group_by UserID
)
where UserID = 'u1' and g1_sum > 0 and g2_sum > 0 and g4_sum = 0
您编写的逻辑可以通过子查询来完成。 您需要IN子句这样做。 请注意,使用表别名(ug2 ug3)为每个子查询查询相同的表
SELECT ug1.UserID
, ug1.GroupID
FROM [UserGroupTable] ug1
WHERE (ug1.UserID IN ( SELECT ug2.UserID
FROM [UserGroupTable] ug2
WHERE ug2.GroupID IN ('G1','G2')
)
)
AND (ug1.UserID NOT IN ( SELECT ug3.UserID
FROM [UserGroupTable] ug3
WHERE ug3.GroupID IN ('G3')
)
)