2014-09-11 159 views
2

我有出去的想法怎么办的解决方案使用LEFT OUTER我的问题的JOIN在SQL Server左外连接在SQL Server

我有一种情况是这样的:

场景的角色

-------------------- 
    User Access 
-------------------- 
UserID | RoleID 
-------------------- 
1-123 | 1 
1-123 | 2 
1-456 | 1 
1-456 | 3 
--------------------- 


-------------------- 
     Profile 
-------------------- 
UserID | Name 
-------------------- 
1-123 | John 
1-456 | Carl 
--------------------- 

-------------------- 
    User Role 
-------------------- 
Role ID | Role Name 
-------------------- 
1  | Teacher 
2  | Employee 
3  | Head 
4  | IT Staff 
--------------------- 

这里是我的问题

我想告诉所有角色UserID : 1-123未分配(注:分配用户访问权限)。

我试图用LEFT OUTER JOIN来查看哪些不存在到另一个表中,但它只显示了两个用户都没有的IT员工。

请帮帮我

+0

哪个查询你试试?请给出 – Raptor 2014-09-11 03:40:07

回答

2

您可以通过多种方式做到这一点。下面是使用NOT IN一种方法:

SELECT * 
FROM UserRole 
WHERE RoleId NOT IN (
    SELECT RoleId 
    FROM UserAccess 
    WHERE UserId = '1-123') 

这将返回所有角色的用户“1-123”没有。


以下是如何与OUTER JOIN做到这一点:

SELECT * 
FROM UserRole U 
    LEFT JOIN UserAccess UA ON U.RoleId = UA.RoleID AND UA.UserId = '1-123' 
WHERE UA.UserId IS NULL 

下面是使用NOT EXISTS的方法:

SELECT * 
FROM UserRole UR 
WHERE NOT EXISTS (
    SELECT 1 
    FROM UserAccess UA 
    WHERE UserId = '1-123' AND UA.RoleId = UR.RoleId) 
+0

非常感谢这个答案..有什么好的方法..非常有用谢谢你保存我搜索这一天的一天 – 2014-09-11 03:53:33