2017-02-06 3 views
1

Вот моя проблема SQL. У меня есть 2 таблицы:
Таблица Пользователь:Как проверить, является ли набор подмножеством другого набора

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

Роль Таблица поиска:

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

мне нужно проверить, если пользователь имеет все доступы в роли, и в конечном итоге в таблицу, как это :

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

Кроме того, пользователь может иметь несколько ролей, пока у него есть все доступы этих ролей.

Может ли кто-нибудь указать мне направление? Показывая, что логика или базовый метод были бы достаточно полезными. Мне нужно закодировать это в T-SQL. Благодаря!

+1

Что делать, если пользователь имеет доступ к нескольким ролям? –

+0

@GordonLinoff Да, если может иметь несколько ролей. Тогда этот пользователь будет иметь несколько строк в результате. Я добавил это к вопросу. спасибо! –

ответ

1

Вы можете получить все роли, которые пользователь имеет доступ к как:

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

Это именно то, что я ищу! Полностью работает и быстро. Благодаря! –

Смежные вопросы