Запросы: Все пользователи, не входящие в группу; Все пользователи в группе

Этот запрос возвращает всех пользователей, которые не состоят в группе “group-of-users”.

Чтобы использовать этот запрос, просто замените “group-of-users” на слаг вашей группы. Вы получите список имен пользователей тех, кто не входит в группу “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