Usuários que não possuem um determinado emblema

Estou tentando montar uma consulta que mostre os usuários de um grupo que não possuem um determinado selo, como “Certificado”.

Algo como: “mostre-me todos os usuários do grupo VIP que não tenham o selo Certificado”. Obrigado.

Usuários que não possuem um selo específico

Bem, vamos tentar isso:

WITH exclude_badge AS (
SELECT gu.user_id
FROM badges b, user_badges ub, users u, group_users gu
WHERE u.id = ub.user_id
AND ub.badge_id = b.id
AND u.id = gu.user_id
AND b.name = 'Certified'
AND gu.id = 10 
)

SELECT
u.id AS user_id
FROM users u
WHERE u.id NOT IN (SELECT * FROM exclude_badge)
ORDER BY user_id
LIMIT 10

Obrigado pela sua ajuda, Sid. Fiz alguns ajustes e consegui fazer funcionar com o seguinte:

SELECT gu.user_id
FROM badges b, user_badges ub, users u, group_users gu
WHERE u.id = ub.user_id
AND ub.badge_id = b.id
AND u.id = gu.user_id
AND b.name = 'Certified'
AND gu.group_id = 42
)

SELECT
u.id AS user_id
FROM users u, group_users gu
WHERE u.id = gu.user_id
AND gu.group_id = 42
AND u.id NOT IN (SELECT * FROM exclude_badge)
ORDER BY user_id
LIMIT 100

Membros do grupo que não possuem uma determinada insígnia

Ótimo! Vamos adicionar parâmetros e atualizar minha lista de consultas :wink:

Versão final: