我有下面的表结构更好的方法来写这个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