Получение пользователя, который имеет только одну роль в SQL Server - PullRequest
1 голос
/ 27 января 2011

Я использую MS SQL Express 2008, и моя проблема заключается в следующем. В моей системе есть некоторые пользователи, которые имеют две роли «1» и «2», а другие имеют только одну роль «2». В этой хранимой процедуре я просто хочу получить пользователей, которые имеют одну роль. Я хочу получить конкретного пользователя из системы, у которого есть только роль «2».

Вот мой sp:

SELECT      tblUsers.user_id, tblUsers.user_username, tblUsers.user_password, tblUsers.user_name, tblUsers.user_surname, tblUsers.user_email
FROM        tblRoles
INNER JOIN  tblUserRole ON tblRoles.role_id = tblUserRole.role_id
INNER JOIN  tblUsers ON tblUserRole.user_id = tblUsers.user_id
WHERE       (tblUserRole.role_id = 2) AND NOT (tblUserRole.role_id = 1)

это утверждение все еще дает мне пользователей с двумя ролями.

1 Ответ

2 голосов
/ 27 января 2011

Использование group by вместе с предложением having:

SELECT tblUsers.user_id, tblUsers.user_username, 
       tblUsers.user_password, tblUsers.user_name, 
       tblUsers.user_surname, tblUsers.user_email,
       count(1)
  FROM tblRoles INNER JOIN
       tblUserRole ON tblRoles.role_id = tblUserRole.role_id INNER JOIN
       tblUsers ON tblUserRole.user_id = tblUsers.user_id
 GROUP BY tblUsers.user_id, tblUsers.user_username, 
       tblUsers.user_password, tblUsers.user_name, 
       tblUsers.user_surname, tblUsers.user_email
HAVING count(1) = 1
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...