쿼리: 그룹에 없는 모든 사용자; 그룹에 있는 모든 사용자

이 쿼리는 “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