Sqlserver
 sql >> Base de données >  >> RDS >> Sqlserver

Obtenir l'inverse d'une jointure ?

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.