2014-09-11 207 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