根据条件从另一个表中选择特定记录

时间:2017-04-13 07:30:03

标签: sql sql-server

我有两张桌子;其结构如下:

enter image description here

enter image description here

在第一个表格中,我根据 RoleID 分配菜单权限。在某些情况下,我想覆盖特定用户(UserID)的一些其他权限。因此,第二个表用于特定用户的其他权限。 在下面这个例子中; RoleID = 2且MenuID = 4没有添加权限;所以我在第二个表中添加了1行。在获取记录时,我需要从第二个表而不是第一个表中的第三行获取该记录。如何为此目的进行查询?

3 个答案:

答案 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