我有两张桌子;其结构如下:
在第一个表格中,我根据 RoleID 分配菜单权限。在某些情况下,我想覆盖特定用户(UserID)的一些其他权限。因此,第二个表用于特定用户的其他权限。 在下面这个例子中; RoleID = 2且MenuID = 4没有添加权限;所以我在第二个表中添加了1行。在获取记录时,我需要从第二个表而不是第一个表中的第三行获取该记录。如何为此目的进行查询?
答案 0 :(得分:2)
如果我清楚地理解你的问题,那就是你需要的。
select r.application,r.roleid,r.menuid
case when u.roleid is null and u.menuid is null
then r.isadd else u.isadd end
,case when u.roleid is null and u.menuid is null
then r.isedit else u.isedit end
-- same case conditions for other columns.
from role_menu_rights r
left join
user_role_menu_rights u
on r.roleid=u.roleid
and r.menuid=u.menuid
答案 1 :(得分:0)
Select u1.Application,u1.UserID, u1.RoleID, u1.MenuID, u1.isAdd, u1.isEdit, u1.isDelete, u1.IsView
from User_Role_Menu_Right u1
where u1.UserID = :userID
union
Select r.Application,u.UserID, r.RoleID, r.MenuID, r.isAdd, r.isEdit, isDelete, IsView
from User_Role_Menu_Right u, Role_Menu_Right r
where
u.UserId = :userId and u.RoleId != r.RoleID and u.MenuID != r.MenuID;
答案 2 :(得分:0)
你可以使用union:
select *
from role_menu_rights
where not exists
(select *
from user_role_menu_rights
where RoleID = role_menu_rights.RoleID AND MenuID = role_menu_rights.MenuID )
union all
select Application, RoleID, MenuID, IsAdd, IsEdit, IsEdit, IsDelete, IsView
from user_role_menu_rights