SQL - Как вы получаете записи, соответствующие всем значениям в связанной таблице - PullRequest
1 голос
/ 11 марта 2010

У меня есть много-много отношений в моей базе данных. Например, у меня есть USER table, ROLE Table и USERINROLE table. У меня есть поиск на моем сайте, который должен найти пользователей в указанных ролях. Например, я хотел бы получить записи пользователя, которые находятся в ролях «читатель» И «писатель»

Мой запрос перед тем, где выглядит следующим образом:

SELECT * FROM User u INNER JOIN UserInRole ur ON
u.UserId= ur.UserId INNER JOIN Role r ON 
Ur.RoleId = r.RoleId

ГДЕ было бы что-то вроде

WHERE roleid IN (1,2) 

но это приводит пользователей к роли 1 ИЛИ к роли 2, и мне нужно, чтобы они были и ролью 1, и ролью 2

Мне нужно получить строку пользователя и строку роли для ORM (Nhibernate)

Редактировать: я использую NHibernate, так что, если есть собственный способ сделать это, это было бы здорово

Ответы [ 3 ]

0 голосов
/ 11 марта 2010

Не могли бы вы попробовать что-то вроде этого:

Select * from User u
inner join UserInRole ur1 on u.UserID = ur1.UserID
inner join UserInRole ur2 on u.UserID = ur2.UserID
where ur1.RoleID = 1
and ur2.RoleID = 2

Непроверенные и неоптимизированные ...

0 голосов
/ 11 марта 2010

Для этого вы также можете использовать оператор INTERSECT.

SELECT * FROM User
WHERE UserId IN
(

SELECT UserId FROM UserInRole 
WHERE RoleId =1
INTERSECT
SELECT UserId FROM UserInRole 
WHERE RoleId =2
)
0 голосов
/ 11 марта 2010

Присоединитесь ко второй копии UserInRole. Скажите, что псевдоним для второй копии - ur2, тогда ваше условие where может быть

Where ur.roleId = 1 and ur2.roleId = 2
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...