要實現目標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