2017-04-13 179 views
0

我有兩個表格;下面根據條件從另一個表中選擇特定記錄

enter image description here

enter image description here

其結構被賦予在我分配基於菜單權利的第一個表角色ID。在某些情況下,我想覆蓋特定用戶(用戶ID)的一些其他權利。所以這第二個表格正在用於特定用戶的額外權利。 在下面的例子中; RoleID = 2和MenuID = 4沒有添加權限;所以我在第二個表中添加了1行。在獲取記錄時,我需要從第二個表中獲取該記錄,而不是第一個表中的第三個記錄。如何爲此目的進行查詢?

+1

您可以包括和格式化文本,而不是圖像樣本數據?你還可以向我們展示查詢的預期結果嗎? –

+1

你應該添加查詢,直到現在, – etsa

+1

所以你需要'role_menu_rights'中的所有記錄,除了那些'userid'中有'user_role_menu_rights'條目的'roleid'。爲此,您需要'user_role_menu_rights'中的記錄(userid,roleid)組合?清楚地給你預期的輸出 – Utsav

回答

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 
+0

謝謝你它正常工作 – Pradees

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; 
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 
相關問題