sql >> Databasteknik >  >> RDS >> Sqlserver

Få motsatsen till en join?

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.



  1. Anropa en lagrad procedur inom en lagrad procedur

  2. hur man sorterar ordning på LEFT JOIN i SQL-fråga?

  3. orakel - vilka uttalanden måste göras?

  4. exakt vad gör detta Class.forName(com.mysql.jdbc.Driver).newInstance();