我有兩個表格;下面根據條件從另一個表中選擇特定記錄
其結構被賦予在我分配基於菜單權利的第一個表角色ID。在某些情況下,我想覆蓋特定用戶(用戶ID)的一些其他權利。所以這第二個表格正在用於特定用戶的額外權利。 在下面的例子中; RoleID = 2和MenuID = 4沒有添加權限;所以我在第二個表中添加了1行。在獲取記錄時,我需要從第二個表中獲取該記錄,而不是第一個表中的第三個記錄。如何爲此目的進行查詢?
我有兩個表格;下面根據條件從另一個表中選擇特定記錄
其結構被賦予在我分配基於菜單權利的第一個表角色ID。在某些情況下,我想覆蓋特定用戶(用戶ID)的一些其他權利。所以這第二個表格正在用於特定用戶的額外權利。 在下面的例子中; RoleID = 2和MenuID = 4沒有添加權限;所以我在第二個表中添加了1行。在獲取記錄時,我需要從第二個表中獲取該記錄,而不是第一個表中的第三個記錄。如何爲此目的進行查詢?
如果我明白你的問題,這就是你需要的。
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
謝謝你它正常工作 – Pradees
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;
你可以使用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
您可以包括和格式化文本,而不是圖像樣本數據?你還可以向我們展示查詢的預期結果嗎? –
你應該添加查詢,直到現在, – etsa
所以你需要'role_menu_rights'中的所有記錄,除了那些'userid'中有'user_role_menu_rights'條目的'roleid'。爲此,您需要'user_role_menu_rights'中的記錄(userid,roleid)組合?清楚地給你預期的輸出 – Utsav