特定のバッジを持っていないユーザー

グループ「VIP」に所属し、「Certified」というバッジを持っていないユーザーを表示するクエリを組みたいと考えています。

「グループ VIP に所属し、Certified というバッジが存在しないユーザーをすべて取得してください」といった内容です。よろしくお願いいたします。

特定のバッジを持っていないユーザー

さて、これを試してみましょう:

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

Sid、ご協力ありがとうございます。いくつか調整を加え、以下のように動作するようにしました。

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

特定のバッジを持たないグループのメンバー

素晴らしい!パラメータを追加して、クエリリストを更新しましょう :wink:

最終バージョン: