2010-03-11 55 views
1

我在數據庫中有多對多的關係。例如,我有一個USER tableROLE TableUSERINROLE table。我在我的網站上搜索需要查找指定角色的用戶。例如,我想找回誰是角色的訪問記錄「讀者」 「作家」SQL-如何檢索匹配鏈接表中所有值的記錄

在這裏之前我的查詢是這樣的:

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

我需要RETR ieve用戶行和角色一起排了ORM(NHibernate的)

編輯:我使用NHibernate因此,如果有做這個原生的方式,這將是真棒

回答

0

加入UserInRole的第二個副本。說的第二個副本的別名是UR2,那麼你在那裏的條件可以

Where ur.roleId = 1 and ur2.roleId = 2 
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 

未經測試和未優化...

0

你也可以爲此使用INTERSECT運算符。

SELECT * FROM User 
WHERE UserId IN 
(

SELECT UserId FROM UserInRole 
WHERE RoleId =1 
INTERSECT 
SELECT UserId FROM UserInRole 
WHERE RoleId =2 
) 
相關問題