0

我想编写一个脚本,它会显示只有用户拥有的所有消息RoleID = 4。所以我试着写这样的东西:

SELECT DT.DiscussionThreadID, DT.Message FROM DiscussionThread DT
INNER JOIN Users U on U.UserID = DT.CreatedBy
INNER JOIN UserRoles UR on UR.UserID = U.RoleID
WHERE UR.RoleID = 4

UserRoles 表示例:

UserID     RoleID
1          1
1          2
1          4
2          4
3          3
3          4

我希望只看到用户发布的消息UserID = 2- 他没有其他角色,除了RoleID = 4. 但我的脚本返回所有帖子。有人能帮我吗?

4

2 回答 2

1

如果您想要更好的性能,请在加入 DiscussionThread 之前进行角色检查。您也可以省去 users 表,因为表中的字段没有被使用:

SELECT DT.DiscussionThreadID, DT.Message
FROM DiscussionThread DT inner join
     (select userId
      from UserRoles UR
      group by userId
      having COUNT(distinct roleId) = 1) and max(roleId) = 4
     ) ur
     on UR.UserID = U.UserID
group by DT.DiscussionThreadID, DT.Message
于 2012-11-19T16:49:34.943 回答
1
SELECT DT.DiscussionThreadID, DT.Message
FROM DiscussionThread DT
INNER JOIN Users U on U.UserID = DT.CreatedBy
INNER JOIN UserRoles UR on UR.RoleID = U.RoleID
group by DT.DiscussionThreadID, DT.Message
having count(Distinct roleID) = 1
and max(roleID)=4
于 2012-11-19T15:12:01.600 回答