Sqlserver
 sql >> Database >  >> RDS >> Sqlserver

Ottieni l'inverso di un join?

Puoi utilizzare un left outer join per prendere tutti gli utenti, quindi, spazzare via qualsiasi utente a cui è collegato un gruppo. La seguente query ti darà solo l'elenco degli utenti in cui non è presente alcun gruppo da avere:

select
    u.*
from
    users u
    left outer join groupusers g on
        u.userid = g.userid
where
    g.userid is null

Se vuoi trovare tutti gli utenti non in un particolare gruppo:

select
    u.*
from
    users u
    left outer join groupusers g on
        u.userid = g.userid
        and g.groupid = @GroupID
where
    g.userid is null

Questo sarà solo escludere gli utenti in quel particolare gruppo. Ogni altro utente verrà restituito. Questo perché il groupid condizione è stata eseguita nel join clausola, che limita le righe unite, non restituite, che è ciò che è il where la clausola lo fa.