查询:所有不在组的用户;所有在组的用户

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

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

不在组中的所有用户

-- [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”组中所有用户的查询。

组中的所有用户

-- [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