2010-05-25 3 views
3

У меня есть следующий запрос, который выводит результат ниже;T-SQL Right присоединяется ко всем записям, вкл. Выбранная колонка

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 производят истина/ложь, чтобы показать это.

Надеюсь, это имеет смысл и, надеюсь, вам не нужны определения таблиц, поскольку все, с чем мне нужно работать, находится в исходном запросе. Мне просто нужно немного манипулировать им и получить соединение в нужном месте.

спасибо. Pace

ответ

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

Смежные вопросы