0

このクエリを単純化する方法を知りたいと思っていました。ここ( http://sqlfiddle.com/#!3/2789c/4 )には完全な例があります

SELECT distinct (R.[roleId])
FROM [Role] R
LEFT  JOIN [userRole] U ON R.[roleId] = U.[roleId]
WHERE R.RoleID NOT IN(
  SELECT [roleId] 
  from [dbo].[userRole] 
  WHERE userId = 2) 

特定のユーザーに割り当てられていないすべてのロールを取得したい。内部選択は消去できると思います。

更新 1

あなたの多大な助けの後、私は1つしか使えませんでしたSELECT http://sqlfiddle.com/#!3/2789c/87

SELECT R.[roleID]
FROM [Role] R
LEFT  JOIN [userRole] U
ON R.[roleID] = U.[roleID] AND U.userId = @userID
WHERE U.userId IS NULL
4

3 に答える 3

3

それが得られるのと同じくらい簡単です:

select roleId
  from Role
except
select roleId
  from userRole
 where userId = 2
于 2013-10-14T07:34:14.367 に答える