【问题标题】:Select only users that are (at least) member in certain groups仅选择(至少)是某些组成员的用户
【发布时间】:2015-02-27 20:35:34
【问题描述】:

我一直在进行查询以获取包含各自组的用户列表。 我知道了。
但是有一些限制:

  1. 如果用户只是 group5 的成员,则不应出现在列表中
  2. 如果是 group5 和其他组的成员,它应该出现在列表中

我可以获取不是 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)

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

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

【问题讨论】:

    标签: sql postgresql report exists


    【解决方案1】:

    换句话说,您只希望用户至少拥有一个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 子句,请将这两个表达式括在括号中。运算符优先级。

    【讨论】:

    • 对,对我有帮助,现在我对 SQL 有了更多的了解
    猜你喜欢
    • 1970-01-01
    • 2022-11-11
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2013-08-26
    • 1970-01-01
    相关资源
    最近更新 更多