# 查询：所有不在组的用户；所有在组的用户

**URL:** https://meta.discourse.org/t/queries-all-users-not-in-group-all-users-in-group/239110
**Category:** Data & reporting
**Tags:** sql-query
**Created:** [2022 年9 月 15 日 13:54 UTC](https://meta.discourse.org/t/queries-all-users-not-in-group-all-users-in-group/239110 "2022-09-15T13:54:35Z")
**Posts on this page:** 1
**Page:** 1

<div class="post-metadata">

### 作者： ![Tris20](https://sea3.discourse-cdn.com/meta/user_avatar/meta.discourse.org/tris20/32/264639_2.png) [@Tris20](https://meta.discourse.org/u/Tris20)
#### 发布日期： [2022 年9 月 15 日 13:54 UTC](https://meta.discourse.org/t/queries-all-users-not-in-group-all-users-in-group/239110/1 "2022-09-15T13:54:36Z")

</div>

此查询返回不在“group-of-users”组中的所有用户。

要使用此查询，只需将“group-of-users”更改为组的 slug。您将获得不在“group-of-users”组中的用户的用户名列表。

# 不在组中的所有用户

```sql
-- [params]
-- string :group_name = group-of-users

WITH group_members AS(
SELECT
u.username, u.id AS user_id, g.name
FROM users u
JOIN group_users gu
ON gu.user_id = u.id
JOIN groups g
ON g.id = gu.group_id
WHERE g.name = :group_name
),
all_users AS(
SELECT
    u.username
FROM users u
)
SELECT all_users.username
FROM all_users
EXCEPT
SELECT group_members.username
FROM group_members

```

为了完整起见，这里有一个获取“group-of-users”组中所有用户的查询。

# 组中的所有用户

```sql
-- [params]
-- string :group_name = group-of-users

SELECT
u.username, u.id AS user_id, g.name
FROM users u
JOIN group_users gu
ON gu.user_id = u.id
JOIN groups g
ON g.id = gu.group_id
WHERE g.name = :group_name

```
