我有:
用户:
Joe:GroupID1 Tom:GroupID2 Tom:GroupID3
UserGroup:
Group1:RoleID1 Group2:RoleID2 Group3:RoleID3
角色:
RoleID1:Admin RoleID2:Writer RoleID3:Reader
现在,我可以通过匹配GroupID,然后针对像Joe这样的用户的RoleID来找到用户的角色。
如何查询仅当用户属于两个或多个特定组时才可用的角色?
例如,从“角色”表中,可以直接从Group1中指定管理员角色。但是,如果用户属于第2组和第3组,则可以选择应用“管理角色”。
我不确定如何查询这种情况,或者我是否需要更新表以解决该问题。
答案 0 :(得分:0)
好吧,找到一个不是Admin而是Writer和Reader的用户就很容易了,但是要使该查询添加该用户的Admin角色则有些棘手。 >
SELECT USER.NAME, COUNT(USER.NAME) AS NUM_ROLES
FROM USER
JOIN USERGROUP ON USER.GROUPID = USERGROUP.GROUPID
JOIN ROLE ON ROLE.ROLEID = USERGROUP.ROLEID AND ROLE.NAME IN ('Writer', 'Reader')
GROUP BY USER.NAME
ORDER BY 2 DESC
OR
SELECT A.* FROM
(SELECT USER.NAME, COUNT(USER.NAME) AS NUM_ROLES
FROM USER
JOIN USERGROUP ON USER.GROUPID = USERGROUP.GROUPID
JOIN ROLE ON ROLE.ROLEID = USERGROUP.ROLEID
GROUP BY USER.NAME) AS A
WHERE A.NUM_ROLES > 1
ORDER BY A.NUM_ROLES DESC
如果您需要排除管理员角色,则可以更改以下行:
JOIN ROLE ON ROLE.ROLEID = USERGROUP.ROLEID AND ROLE.NAME <> 'Admin'