У меня есть следующая ситуация, и я не уверен, как лучше всего ее решить. Было бы с благодарностью принято любое руководство по подготовке необходимого представления.SQL View union from joiner table
У меня есть 4 таблицы:
пользователей (идентификатор Int, имя пользователя VARCHAR)
роли (Идентификатор роли INT, RoleName VARCHAR)
businessunit (Buid Int, buname VARCHAR)
user_role_map (идентификатор пользователя, Идентификатор роли, Buid)
В таблице ролей у меня есть роль с идентификатором 0, который является ролью «системный администратор», а в таблице businessunit у меня есть бизнес-единица ИТ. Любые пользователи, возникшие в результате запроса ниже, будут считаться системными администраторами и должны иметь полный доступ к каждой бизнес-единице.
SELECT userid FROM user_role_map WHERE roleid = 0 AND buid = 0
Мне нужно построить представление, которое показывает все «админ несистемных» union'd к списку каждого бизнес-подразделение и каждому «системный администратор» пользователь. Первая часть проста в следующем запросе, но вторая часть - это то, с чем я борюсь.
SELECT userid, roleid, buid FROM user_role_map WHERE roleid > 0 AND buid > 0
Я дам несколько примеров данных, чтобы проиллюстрировать то, что я пытаюсь сделать:
users
---------------
1, "sysAdmin"
2, "salesUser1"
3, "serviceUser1"
4, "manager1"
5, "salesUser2"
6, "serviceUser2"
7, "manager2"
roles
---------------
0, "SystemAdmin"
1, "Full"
2, "Update"
3, "Read"
businessunit --------------- 0, "ИТ" 1, "fooSales" 2, "fooService" 3, "barSales" 4, "barService"
user_role_map
---------------
1, 0, 0
2, 1, 1
2, 3, 3
3, 1, 2
3, 3, 4
4, 1, 1
4, 1, 2
5, 1, 3
5, 3, 1
6, 1, 4
6, 3, 3
7, 1, 2
7, 1, 4
Наконец, мне нужно мнение, чтобы предоставить следующую информацию по данным выше образцов (обратите внимание на последние 4 строки):
new view
---------------
2, 1, 1
2, 3, 3
3, 1, 2
3, 3, 4
4, 1, 1
4, 1, 2
5, 1, 3
5, 3, 1
6, 1, 4
6, 3, 3
7, 1, 2
7, 1, 4
1, 1, 1
1, 1, 2
1, 1, 3
1, 1, 4
Примечание: пример данных здесь есть только один «System Admin» пользователь, но может быть любое количество пользователей этого типа.
Hi souplex, спасибо за предложение, но это работает только для явного примера я при условии, где есть только один пользователь с «Системным администратором Мне нужна эта работа для неограниченного количества пользователей «Системного администратора». – Aossey
Я думаю, вы можете сделать это хранимой процедурой, присоединиться к таблице users и параметризовать идентификатор роли. – souplex