sql >> Base de Datos >  >> RDS >> Sqlserver

Obtener el inverso de una combinación?

Puede usar una left outer join para agarrar a todos los usuarios, luego, arrasa con cualquier usuario donde haya un grupo adjunto. La siguiente consulta le dará solo la lista de usuarios donde no hay grupo disponible:

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

Si desea encontrar todos los usuarios que no están en un grupo en particular:

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

Esto solo excluir a los usuarios de ese grupo en particular. Todos los demás usuarios serán devueltos. Esto se debe a que el groupid la condición se realizó en join cláusula, que limita las filas unidas, no devueltas, que es lo que where cláusula sí.