要实现目标1,您可以使用Remou的建议,使用以下查询将角色名列表输入到WHERE
子句中。但是,删除'WHERE'子句,运行查询,然后粘贴到Excel中(目标3)“快速和肮脏”筛选可能更有意义。
SELECT DISTINCT Roles_1.RoleName,
Users.UserName
FROM Users
INNER JOIN ((Roles
INNER JOIN (RolesMemberRoles
INNER JOIN Roles AS Roles_1
ON RolesMemberRoles.MemberRoleID = Roles_1.ID)
ON Roles.ID = RolesMemberRoles.RoleID)
INNER JOIN RoleUsers
ON Roles.ID = RoleUsers.RoleID)
ON Users.ID = RoleUsers.UserID
WHERE Roles_1.RoleName In ("Prez", "Veep", "Staffer")
ORDER BY Roles_1.RoleName,
Users.UserName;
要返回能够履行各种角色(目标2)的用户数,您可以运行以下命令。
SELECT InheritedRoles.RoleName,
Count(*) AS NumOfTestersAvailable
FROM (SELECT DISTINCT Roles_1.RoleName,
Users.UserName
FROM Users
INNER JOIN ((Roles
INNER JOIN (RolesMemberRoles
INNER JOIN Roles AS Roles_1
ON RolesMemberRoles.MemberRoleID =
Roles_1.ID)
ON Roles.ID = RolesMemberRoles.RoleID)
INNER JOIN RoleUsers
ON Roles.ID = RoleUsers.RoleID)
ON Users.ID = RoleUsers.UserID) AS InheritedRoles
GROUP BY InheritedRoles.RoleName
ORDER BY InheritedRoles.RoleName;
上面的SQL假定每个角色都包含自己作为RoleMemberRoles表中的成员。您应该使用DISTINCT
,因为数据模型不会阻止单个用户拥有多个角色,并因此在每个结果集中出现多次。
哈,+1抽出时间来绘制表格结构...非常好。 –
谢谢,杰里米 - 桌子是http://www.asciiflow.com/礼貌 - 我发现它对这类情况非常有帮助。 – SeanKilleen
你知道你可以说'Where Field in(“abc”,“def”)'你不是吗? – Fionnuala