仅选择在某些组中(至少)成员的用户

时间:2015-02-27 20:35:35

标签: sql postgresql report exists

我一直致力于查询以获取各自组的用户列表。 我把它盖好了。
但是有一些限制:

  1. 如果用户只是group5的成员,则不应出现在列表中
  2. 如果是group5和其他组的成员,它应该出现在列表中
  3. 我可以获得不是group5成员的用户,如果他们是成员,他们就不会出现在列表中。

    我的问题是group5的用户成员和其他组的成员,他们没有出现,但他们应该出现在列表中

    以下是查询:

    select 
        user_id, group_id  
    from 
        group_users 
    where 
        group_id != 5 
        and user_id not in (select distinct user_id 
                            from group_users 
                            where group_id = 5)
    

    E.g。应该出现用户1和2,它们是group1,group2和group5的成员。那些用户不会出现因为group5,即使他们有其他组也应该出现。

    另一方面,user3只是group5的成员,因此,该用户不会出现。

1 个答案:

答案 0 :(得分:0)

换句话说,您只希望拥有至少一个group_id <> 5的用户:

SELECT user_id, group_id  
FROM   group_users gu
WHERE  group_id <> 5  -- optional, might help performance
   OR  EXISTS (       -- just this works, too
   SELECT 1 FROM group_users 
   WHERE  user_id = gu.user_id
   AND    group_id <> 5
   )

如果添加更多WHERE子句,请将这两个表达式括在括号中。运算符优先级。