如何生成 SQL 查询以获取属于几个组而不属于其他某些组的用户列表

时间:2021-03-22 21:58:14

标签: sql

假设我们有一张这样的桌子。

UserID | GroupID
u1 | G1
u2 | G1
u3 | G2
u1 | G2
u1 | G4
u1 | G3

如何生成 SQL 查询来验证 -> 用户“U1”在 G1 和 G2 中,但不在 G4 中” 这个逻辑可以是动态的。所以可能是 -> 如果用户“U1”在 G2 而不是在 G3

所以基本上我需要验证“逻辑”是否返回 true 或 false ,对于以这种方式记录的“逻辑”:

返回用户,如果他们在 (@Gr='gr1' or @Gr='gr2') and @gr<>'gr3'

希望我解释正确:)

2 个答案:

答案 0 :(得分:0)

希望,我正确理解了您的问题。

请检查以下查询,如果您没有定义组,这可以工作, 根据您的需要更改 where 条件。

例如import java.util.regex.Matcher; import java.util.regex.Pattern; public class Example { public static void main(String[] args) { final String regex = "[^a-zA-Z0-9,.\\s]"; final String string = "The input here @$%/"; final Pattern pattern = Pattern.compile(regex); final Matcher matcher = pattern.matcher(string); while (matcher.find()) { System.out.println(matcher.group(0)); } } }

 to verify -> is a user 'U1' is in G1 and in G2 but not In G4

答案 1 :(得分: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') 
                          )
       )