Vous pouvez utiliser une left outer join
pour saisir tous les utilisateurs, puis, faites exploser tout utilisateur auquel un groupe est attaché. La requête suivante vous donnera uniquement la liste des utilisateurs pour lesquels il n'y a pas de groupe :
select
u.*
from
users u
left outer join groupusers g on
u.userid = g.userid
where
g.userid is null
Si vous souhaitez rechercher tous les utilisateurs qui ne font pas partie d'un groupe particulier :
select
u.*
from
users u
left outer join groupusers g on
u.userid = g.userid
and g.groupid = @GroupID
where
g.userid is null
Cela va seulement exclure les utilisateurs de ce groupe particulier. Tous les autres utilisateurs seront renvoyés. C'est parce que le groupid
la condition a été effectuée dans la join
clause, qui limite les lignes jointes, non retournées, ce que le where
clause le fait.