Abfragen: Alle Benutzer nicht in Gruppe; Alle Benutzer in Gruppe

Diese Abfrage gibt alle Benutzer zurück, die nicht in der Gruppe „group-of-users“ sind.

Um diese Abfrage zu verwenden, ändern Sie einfach „group-of-users“ in den Slug der Gruppe. Sie erhalten eine Liste von Benutzernamen der Personen, die nicht in der Gruppe „group-of-users“ sind.

Alle Benutzer nicht in der Gruppe

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

Und zur Vervollständigung, hier ist eine Abfrage, um alle Benutzer in einer Gruppe „group-of-users“ zu erhalten.

Alle Benutzer in der Gruppe

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