SQL-如何检索与链接表中的所有值匹配的记录

时间:2010-03-11 09:51:36

标签: sql nhibernate many-to-many

我的数据库中有很多关系。例如,我有USER tableROLE TableUSERINROLE table。我在我的网站上搜索需要查找指定角色的用户。例如,我想检索角色为“读者”的用户记录 AND “writer”

我的查询之前的地址如下:

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

WHERE就像

WHERE roleid IN (1,2) 

但是这会让用户担任角色1或角色2,我需要他们同时担任角色1和角​​色2

我需要为ORM(Nhibernate)

一起检索用户行和角色行

编辑:我正在使用NHibernate,所以如果有一种本地方式来做这件事,那就太棒了

3 个答案:

答案 0 :(得分:0)

加入UserInRole的第二个副本。假设第二个副本的别名是ur2,那么你的where条件可以是

Where ur.roleId = 1 and ur2.roleId = 2

答案 1 :(得分:0)

难道你不能尝试这样的事情:

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

未经测试且未经优化......

答案 2 :(得分:0)

您也可以使用INTERSECT运算符。

SELECT * FROM User
WHERE UserId IN
(

SELECT UserId FROM UserInRole 
WHERE RoleId =1
INTERSECT
SELECT UserId FROM UserInRole 
WHERE RoleId =2
)