SQl中右连接的问题

时间:2014-11-17 10:10:31

标签: c# sql sql-server sql-server-2008

我有以下表结构,我也提到了我的预期输出 请帮我查询,因为我不太了解sql查询

表格结构

表1:Emp详细信息

    FName      Id  
    Pratik      1     
    Praveen     3     
    Nilesh      2     

表1:JoinigDocument

id    DocumentName
1     Leaving
2     Exp letter
3     birth cert

表2:EmployeeJoiningDocument

EmpId  JoiningDocumentId
1        1
1        2
3        1
3        2
3        3
2        1
2        3

预期产出:

FName      Id  JoiningDocumentId  DocumentName   
Pratik      1     1                  Leaving         
Pratik      1     2                  Exp letter      
Pratik      1     null               birth cert      
Praveen     3     1                  Leaving        
Praveen     3     2                  Exp letter      
Praveen     3     3                  birth cert    
Nilesh      2     1                  Leaving       
Nilesh      2     null               Exp letter      
Nilesh      2     3                  birth cert     

1 个答案:

答案 0 :(得分:1)

您可以将查询编写为:

select  
       A.FName,
       A.Id,
       B.JoiningDocumentId,
       c.DocumentName
from @JoinigDocument C
cross join @EmployeeDetail A
Left join @EmployeeJoiningDocument B on B.EmployeeId = A.id and 
B.JoiningDocumentId = C.id
order by A.Id

首先交叉加入JoinigDocumentEmployeeDetail表,以便您获得员工和文档的所有可能组合,而不管员工是否具有该加入文档。然后,您需要执行左连接以保留所有这些匹配项,并查找与EmployeeJoiningDocument中的有效条目相对应的数据。

Demo