J'ai un problème à obtenir les utilisateurs qui n'ont pas tout fort> l'ID de rôles à l'intérieur des parenthèses.
La requête ci-dessous renvoie l'utilisateur s'il ne dispose pas d'un de ces rôles. requête SQL: p> exemple de l'user_group_role: p> Dans cet exemple, l'utilisateur 3256 a tous les roles_id, l'utilisateur 62 n'a que les 4930 et 105 rôle_id, l'utilisateur 4 n'a aucun de ces éléments_id, dans mon cas, je veux que ma requête retourne l'utilisateur 4 Par exemple. P> Merci pour votre aide! p> p>
3 Réponses :
Vous devez regrouper par chaque utilisateur et prendre uniquement ceux qui n'ont aucun de ces rôles. Le La clause code> est comme où code > Mais pour des groupes de données et pas seulement un seul enregistrement. P> P>
Si vous avez une liste séparée d'utilisateurs, je vous recommanderais:
select u.*
from users u
where not exists (select 1
from user_group_role ugr
where ugr.user_id = u.user_id and
ugr.role_id in (23, 98, 105, 3310, 4928, 4929, 4930)
);
Si vous avez une contrainte unique sur l'utilisateur et le rôle (ce qui signifie qu'un utilisateur ne peut pas être attribué le même rôle deux fois, même dans plusieurs groupes), vous pourriez faire:
SELECT user_id
FROM user_group_role ugr
GROUP BY user_id
HAVING SUM(
CASE WHEN role_id IN (23,98,105,3310,4928,4929,4930)
THEN 1 ELSE 0 END) < 7
Par "pas tous" à vous dire que l'utilisateur n'a aucun de ces rôles ou l'utilisateur n'a d'autres mais pas tous ces rôles?