Sea*_*een 5 sql parameters excel ms-access
+---------------+
+------------+ |RolesUsers |
|Roles | |---------------| +---------------+
|+-----------| |ID | |Users |
+-+|ID |+---+|RoleID | |---------------|
| |RoleName | |UserID |+--+|ID |
| +------------+ +---------------+ |UserName |
| +---------------+
|
| +-----------------+
| |RolesMemberRoles |
| |-----------------|
| |ID |
+-+|RoleID |
+-+|MemberRoleID |
+-----------------+
Run Code Online (Sandbox Code Playgroud)
Run Code Online (Sandbox Code Playgroud)PARAMETERS p_RoleName Text ( 255 ); SELECT Roles.RoleName, Users.UserName FROM (RolesUsers INNER JOIN Users ON RolesUsers.UserID = Users.ID) INNER JOIN Roles ON RolesUsers.RoleID = Roles.ID Where RolesUsers.RoleID In (Select ID from Roles where Roles.RoleName = p_RoleName) UNION SELECT Roles.RoleName, Users.UserName FROM (RolesUsers INNER JOIN Users ON RolesUsers.UserID = Users.ID) INNER JOIN Roles ON RolesUsers.RoleID = Roles.ID Where RolesUsers.RoleID IN ( SELECT RolesSubroles.SubRoleID FROM RolesSubroles INNER JOIN Roles ON RolesSubRoles.RoleID = Roles.ID where Roles.RoleName = p_RoleName);
WHERE为了实现目标 1,您可以使用 Remou 上面的建议,通过以下查询在子句中键入 RoleName 列表。但是,删除“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;
Run Code Online (Sandbox Code Playgroud)
要返回能够履行各种角色(目标 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;
Run Code Online (Sandbox Code Playgroud)
上面的 SQL 假定每个 Role 都将其自身作为 RoleMemberRoles 表中的 Member 包含。您应该使用它DISTINCT,因为数据模型不会阻止单个用户拥有多个角色,从而在每个结果集中多次出现。
| 归档时间: |
|
| 查看次数: |
1861 次 |
| 最近记录: |