2017-02-06 2 views
1

Voici mon problème SQL. J'ai 2 tables:
Tableau de l'utilisateur:Comment vérifier si un ensemble est un sous-ensemble d'un autre ensemble

[UserID] [Access] 
Abe  A 
Abe  B 
Brad  C 
Cathy  A 

Rôle Table de recherche:

[Role]  [Access] 
Admin  A 
Admin  B 
ReadOnly C 

Je dois vérifier si un utilisateur a tous les accès d'un rôle, et finissent par une table comme celui-ci :

[UserID] [Role} 
Abe  Admin 
Brad  ReadOnly 
Cathy  None 

En outre, un utilisateur peut avoir plusieurs rôles, tant qu'il a tous les accès de ces rôles.

Quelqu'un peut-il me pointer la direction? Me montrer la logique ou la méthode de base serait assez utile. Je devrais coder ceci dans T-SQL. Merci!

+1

si un utilisateur a accès pour plusieurs rôles? –

+0

@GordonLinoff Oui, si cela peut avoir plusieurs rôles. Ensuite, cet utilisateur aura plusieurs lignes dans le résultat. J'ai ajouté ceci à la question. THX! –

Répondre

1

Vous pouvez obtenir tous les rôles que l'utilisateur a accès comme:

select u.userid, r.role 
from users u join 
    roles r 
    on u.access = r.access 
group by u.userid, r.role 
having count(*) = (select count(*) from roles r2 where r2.role = r.role); 
+1

C'est exactement ce que je cherche! Totalement fonctionne, et vite. Merci! –