Utilisateurs ne possédant pas un badge particulier

Je tente de construire une requête qui affichera les utilisateurs d’un groupe ne possédant pas un badge particulier, comme « Certifié ».

Quelque chose du genre : « donnez-moi tous les utilisateurs du groupe VIP où le badge Certifié n’existe pas ». Merci.

Utilisateurs ne possédant pas un badge particulier

Essayons ceci :

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

Merci pour votre aide, Sid. J’ai apporté quelques ajustements et cela fonctionne maintenant avec le code suivant :

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

Membres du groupe ne possédant pas un badge spécifique

Super ! Ajoutons les paramètres et mettons à jour ma liste de requêtes :wink:

Version finale :