Sqlserver
 sql >> Datenbank >  >> RDS >> Sqlserver

Erhalten Sie die Umkehrung eines Joins?

Sie können einen left outer join verwenden Um alle Benutzer zu erfassen, blasen Sie dann alle Benutzer weg, denen eine Gruppe zugeordnet ist. Die folgende Abfrage gibt Ihnen nur die Liste der Benutzer, für die es keine Gruppe gibt:

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

Wenn Sie alle Benutzer finden möchten, die nicht in einer bestimmten Gruppe sind:

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

Dies wird nur schließen Sie die Benutzer in dieser bestimmten Gruppe aus. Jeder andere Benutzer wird zurückgegeben. Das liegt daran, dass die groupid Bedingung wurde im join ausgeführt -Klausel, die die Anzahl der verknüpften Zeilen einschränkt, nicht zurückgegeben, was der where ist Klausel tut.