Du kan använda en left outer join
för att ta tag i alla användare, blåsa sedan bort alla användare där det finns en grupp kopplad. Följande fråga ger dig bara listan över användare där det inte finns någon grupp:
select
u.*
from
users u
left outer join groupusers g on
u.userid = g.userid
where
g.userid is null
Om du vill hitta alla användare som inte tillhör en viss grupp:
select
u.*
from
users u
left outer join groupusers g on
u.userid = g.userid
and g.groupid = @GroupID
where
g.userid is null
Detta kommer endast exkludera användarna i den specifika gruppen. Alla andra användare kommer att returneras. Detta beror på att groupid
villkoret gjordes i join
sats, som begränsar raderna som sammanfogas, inte returneras, vilket är vad where
klausul gör det.