2010-11-16 22 views
0

我有2個表:員工和人與結構返回列名其中加入條件爲空

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

員工PERSONID列引用人的身份證,並可以爲空

我需要返回一個僱員的名稱和我一起的標準是

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 

任何指針?

+0

我有種感覺,你可以有一個不在人桌子上的員工。 – HLGEM 2010-11-16 16:29:04

回答

2

你需要一個外部聯接

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

當您使用的INNER JOIN(或加入),你只能選擇行匹配聯接critiria,在你的例子中,你永遠不會中堂一個空的人的名字,因爲如果員工不會被一個人欺騙,該記錄不會被選中。

如果使用OUTER JOIN(LEFT/RIGHT JOIN),將選擇主表中的所有記錄(第1個爲LEFT,第2個爲RIGHT)。

希望這會有所幫助。

+0

不完全。這是因爲連接條件(Id)中的一個可能爲NULL,並且如果ID不爲null,則返回Name其他爲空。 – WorldIsRound 2010-11-16 07:39:43