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
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 に答える
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 に答える