返回列名称,其中Join条件为null

时间:2010-11-16 07:29:06

标签: sql sql-server-2005 tsql

我有2个表:Employee和具有结构的人

Employee: Id, PersonId, Designation, IsActive
Person:Id, Name, Contact

Employee的PersonId列引用Person的Id,可以为null

我需要返回员工的姓名,我的加入条件是

SELECT emp.Salary, emp.Designation, emp.IsActive, p.Name from Employee emp
JOIN Person P ON P.Id = emp.PersonId or (p.Id is NULL AND emp.Id IS NULL)

这是不正确的,因为我的要求是:

If emp.PersonId = null, return p.Name = NULL
else return p.Name = Person's Name from table

关于此的任何指示?

1 个答案:

答案 0 :(得分:2)

您需要外部联接

SELECT emp.Salary, emp.Designation, emp.IsActive, p.Name 
from Employee emp
left JOIN Person P 
ON P.Id = emp.PersonId 

当你使用INNER JOIN(或JOIN)时,你只选择与join critiria匹配的行,在你的例子中,你永远不会有一个NULL Person名称,因为如果Employee没有与Person联系,那么该记录将不会地选择。

如果您使用OUTER JOIN(LEFT / RIGHT JOIN),将选择主表中的所有记录(第1个带LEFT,第2个带RIGHT)。

希望这有帮助。