3

有这3张桌子:

用户

  • 用户身份
  • 等等

团体

  • group_id
  • 姓名
  • 等等

组_用户

  • group_id
  • 用户身份

检查用户是否属于给定组很容易,但是是否可以检查(在单个查询中)用户是否属于多个组?

例如,具有 id 的用户是否1属于组1, 2, 3, 4

更新

更具体地说,我想检查用户是否属于所有给定的组,而不是他是否属于其中之一。

4

2 回答 2

2

Assuming you mean to ask "whether user 1 belongs to all the groups 1, 2, 3, and 4", the answer would be:

select case when (select count(distinct group_id)
                    from group_users
                   where user_id = 1
                     and group_id in (1, 2, 3, 4)
                 ) = 4 then 'member in all four groups'
             else 'not member in all four groups'
        end

You can simplify the count to count(*)if you are sure there are no duplicate group entries for the user.

于 2013-08-01T08:05:34.740 回答
1

这个查询:

SELECT group_id FROM groups_users WHERE user_id=1

为您提供用户1所属的所有组。

如果您有多个要检查的组,您可以执行以下操作:

SELECT group_id FROM groups_users WHERE user_id=1 AND group_id IN (1,2,3,4)

如果它没有返回任何记录,则用户不在组1、或2中。34

使用COUNT(group_id)COUNT(DISTINCT group_id)找出用户所属的组数。如果它等于请求组的数量,则属于所有:

SELECT COUNT(DISTINCT group_id)=4 FROM groups_users WHERE user_id=1 AND group_id IN (1,2,3,4)

1如果用户属于所有组,这将返回,0否则。

于 2013-08-01T07:59:37.033 回答