2014-02-21 25 views
0
TableName:Emp 
EmpId EmpName EmpAddressId 
1  Ram   100 
2  Ravi    
3  Raj   102 
4  Kiran   
5  Bujji  101 


TableName:Address 
AddressId Address 
101    India 
102    Uk 
103    US 


select E.*,A.Address from EMP E inner join Address A 
on E.EmpId=2 and E.EmpAddressId='' or E.EmpAddressId=A.AddressId 


out put should display as for EmpId:2 
------------------------------ 
EmpId EmpName EmpAddressId Address 
2  Ravi  

for EmpId:3 
------------ 
EmpId EmpName EmpAddressId Address 
3  Raj  102   Uk 

对于员工2,没有EmpAddressId,但此处需要显示为空值或空值。 任何人都可以提供帮助。内部加入空值

回答

2

只需将INNER JOIN替换为LEFT JOIN(或LEFT OUTER JOIN)即可。如果没有匹配,那么对于Address表中的所有列,将导致NULL。此外,您还可以用一个简单的版本替换您的加盟条件:

select E.EmpId, E.EmpName, E.EmpAddressId, A.Address 
from EMP E left join Address A 
on E.EmpAddressId=A.AddressId 
where E.EmpId=2 

更多外部连接上MSDN

+0

在这里,我需要员工个人并不适用于所有员工。我的意思是EmpId作为输入参数。 – Ram

+0

好的,我加回来了。 – Szymon

0

如果任何连接表为空,则内部连接将产生空值。如果所有表都有值,则使用inner join,否​​则使用inner join进行左连接。它确保至少您可以让连接的表值。

对于此,您可以使用左加入

select e.EmpId, e.EmpName, e.EmpAddressId, a.Address 

from EMP e left join Address a 

on e.EmpAddressId=a.AddressId 

where e.EmpId=2