Sqlserver
 sql >> Base de Dados >  >> RDS >> Sqlserver

Obter o inverso de uma junção?


Você pode usar uma left outer join para pegar todos os usuários, então, destrua qualquer usuário onde houver um grupo anexado. A consulta a seguir fornecerá apenas a lista de usuários em que não há grupo disponível:
select
    u.*
from
    users u
    left outer join groupusers g on
        u.userid = g.userid
where
    g.userid is null

Se você quiser encontrar todos os usuários que não estão em um grupo específico:
select
    u.*
from
    users u
    left outer join groupusers g on
        u.userid = g.userid
        and g.groupid = @GroupID
where
    g.userid is null

Isso somente excluir os usuários desse grupo específico. Todos os outros usuários serão devolvidos. Isso ocorre porque o groupid condição foi feita no join cláusula, que limita as linhas unidas, não retornadas, que é o que o where cláusula faz.