我有下面的表結構更好的方法來寫這個SQL查詢
用戶(PK - 用戶ID)
系統(PK - SYSTEMID)
SystemRoles(PK-SystemRoleId,FK - SYSTEMID)
的UserRole(PK-用戶ID & SystemRoleId,FK-SystemRoleId,FK-用戶Id)
Users
可以訪問不同Systems
和一個System
可以定義不同的SystemRoles
。
現在,我需要刪除Users
誰有SystemRoles
分配給他們只爲一個特定的System
(s)。如果他們爲其他Systems
定義了SystemRoles
,則不應刪除它們。
我已經拿出下面的查詢來標識符合刪除條件的記錄,但認爲這肯定會被優化。有什麼建議麼?
SELECT U.*
FROM
(
SELECT
distinct UR.UserID
FROM
dbo.UserRole UR
INNER JOIN dbo.SystemRole SR ON (SR.SystemRoleID = UR.SystemRoleID)
INNER JOIN dbo.[System] S ON (S.SystemID = SR.SystemID)
WHERE
S.SystemName = 'ABC' OR S.SystemName = 'XYZ'
) T
INNER JOIN dbo.[User] U ON (U.UserID = T.UserID)
WHERE T.UserID NOT IN
(
select
distinct UR.UserID
from
dbo.[UserRole] UR
INNER JOIN dbo.SystemRole SR ON (SR.SystemRoleID = UR.SystemRoleID)
INNER JOIN dbo.[System] S ON (S.SystemID = SR.SystemID)
WHERE
S.SystemName <> 'ABC'
AND S.SystemName <> 'XYZ'
)
它有什麼問題?它慢嗎?你確定它很慢嗎?如果它沒有損壞... – DLeh 2014-10-31 16:18:34
如果沒有任何問題,也許http://codereview.stackexchange.com是一個更好的去處。 – DLeh 2014-10-31 16:19:13
你還沒有忘記添加索引,對不對?特別是對於唯一的ID – 2014-10-31 16:20:46