2010-05-25 2 views
3

아래 출력을 생성하는 쿼리가 있습니다.T-SQL 권한이 모든 항목에 조인 inc 선택한 열

SELECT 
    TBLUSERS.USERID, 
    TBLUSERS.ADusername, 
    TBLACCESSLEVELS.ACCESSLEVELID, 
    TBLACCESSLEVELS.AccessLevelName 
FROM 
    TBLACCESSLEVELS INNER JOIN 
    TBLACCESSRIGHTS ON TBLACCESSLEVELS.ACCESSLEVELID = TBLACCESSRIGHTS.ACCESSLEVELID INNER JOIN 
    TBLUSERS ON TBLACCESSRIGHTS.USERID = TBLUSERS.USERID 

결과는 다음과 같습니다.

29 administrator 1   AllUsers   
29 administrator 2 JobQueue     
29 administrator 3 Telephone Directory Admin 
29 administrator 4 Jobqueueadmin    
29 administrator 5 UserAdmin     
29 administrator 6 Product System    
27 alan   1 AllUsers     
97 andy   1 AllUsers     
26 barry   1 AllUsers     
26 barry   2 JobQueue     
26 barry   3 Telephone Directory Admin 
26 barry   4 Jobqueueadmin    
26 barry   5 UserAdmin     
26 barry   6 Product System    
26 barry   7 Newseditor     
26 barry   8 GreetingBoard    

날씨에 관계없이 모든 액세스 수준을 얻을 수 있도록 쿼리를 수정하고 싶습니다. 해당 사용자에 대한 항목이 있습니다. 또한 내가하고 싶은 것은 일종의 존재 사례이므로 다음과 같은 결과를 얻습니다.

29 administrator 1  AllUsers      True 
29 administrator 2  JobQueue      True 
29 administrator 3  Telephone Directory Admin  True 
29 administrator 4  Jobqueueadmin     True 
29 administrator 5  UserAdmin      True 
29 administrator 6  Product System     True 
29 administrator 7  Newseditor      False 
29 administrator 8  GreetingBoard     False 
27 alan   1  AllUsers      True 
27 alan   2  JobQueue      False 
27 alan   3  Telephone Directory Admin  False 
27 alan   4  Jobqueueadmin     False 
27 alan   5  UserAdmin      False 
27 alan   6  Product System     False 
27 alan   7  Newseditor      False 
27 alan   8  GreetingBoard     False 
97 andy   1  AllUsers      True 
97 andy   2  JobQueue      False 
97 andy   3  Telephone Directory Admin  False 
97 andy   4  Jobqueueadmin     False 
97 andy   5  UserAdmin      False 
97 andy   6  Product System     False 
97 andy   7  Newseditor      False 
97 andy   8  GreetingBoard     False 
26 Barry   1  AllUsers      True 
26 Barry   2  JobQueue      True 
26 Barry   3  Telephone Directory Admin  True 
26 Barry   4  Jobqueueadmin     True 
26 Barry   5  UserAdmin      True 
26 Barry   6  Product System     True 
26 Barry   7  Newseditor      True 
26 Barry   8  GreetingBoard     True 

그래서 규칙은 ACCESSLEVELS에 대한 모든 항목을 항상 표시하고 허위/진정한이 보여 곳 EXISTS는 AccessRights에서이 생산하고 있습니다.

나는이 쿼리가 의미가 있으며 희망적으로 작업 할 필요가있는 모든 것이 원래 쿼리에 있어야하므로 테이블 정의가 필요 없기를 바랍니다. 난 그냥 약간 조작하고 올바른 장소에서 합류하는 방법이 필요합니다.

감사합니다. 페이스

답변

3
SELECT u.USERID, 
     u.ADusername, 
     al.ACCESSLEVELID, 
     al.AccessLevelName, 
     CASE WHEN ar.accesslevelid IS NULL THEN 'False' ELSE 'True' END AS Access 
FROM tblusers u 
CROSS JOIN 
     tblaccesslevels al 
LEFT JOIN 
     tblaccessrights ar 
ON  ar.ACCESSLEVELID = al.ACCESSLEVELID 
     AND ar.USERID = u.USERID 
+0

신사 있습니다 :) – CaRDiaK