2013-07-02 50 views
8

我有值編寫自我連接查詢?

CREATE TABLE #tmpEmployee(ID int, EmpName varchar(50), EmpBossID int) 

insert into #tmpEmployee values (1, 'Abhijit', 2); 
insert into #tmpEmployee values (2, 'Haris', 3); 
insert into #tmpEmployee values (3, 'Sanal', 0); 

下表現在我想要的結果成爲繼

ID EmpName BossName 
1 Abhijit Haris 
2 Haris Sanal 

,所以我寫了下面的查詢。

select E1.ID,E1.EmpName, E.EmpName as BossName from #tmpEmployee E inner join #tmpEmployee E1 on E1.EmpBossID=E.ID. 

但問題是第三位員工(Sanal)沒有老闆。 所以我想要這個確切的結果:

ID EmpName BossName 
1 Abhijit Haris 
2 Haris Sanal 
3 Sanal Null 

我該怎麼辦?

+2

替換爲'內join' ['左外join'(http://stackoverflow.com/questions/38549/difference-between-inner-and-outer-join )。 –

+0

從#tmpEmployeeë左外部選擇E1.ID,E1.EmpName,E.EmpName如BossName上E1.EmpBossID = E.ID試圖加入#tmpEmployee E1但結果成爲ID \t \t EmpName BossName NULL NULL \t \t作者Abhijit 作者Abhijit \t哈里斯哈里斯\t薩納爾 – Haris

+2

只需切換到右連接。 – Curt

回答

1

使用權加入

select E1.ID,E1.EmpName, E.EmpName as BossName from #tmpEmployee E right join #tmpEmployee E1 on E1.EmpBossID=E.ID 

ID EmpName BossName 
1 Abhijit Haris 
2 Haris Sanal 
3 Sanal NULL 

我認爲其確定爲ü

0

嘗試這個...

使用左加入..

select E.ID,E.EmpName, E1.EmpName as BossName from #tmpEmployee E left outer join #tmpEmployee E1 on E1.EmpBossID=E.ID 

ID EmpName BossName 
1 Abhijit Haris 
2 Haris Sanal 
3 Sanal NULL 
+0

不,不是正確的可能重複。我得到的答案變得ID \t EmpName \t BossName NULL \t NULL \t作者Abhijit 作者Abhijit \t哈里斯哈里斯\t薩納爾 – Haris

+0

沒有也得到錯誤的答案。至少你確保發佈cmnt是正確的 – 2013-07-02 05:09:16

1

使用LEFT JOIN和反轉表格的順序:

select 
    E.ID, 
    E.EmpName, 
    B.EmpName as BossName 
from tmpEmployee E 
left join tmpEmployee B on E.EmpBossID = B.ID 

見這個查詢的live demo上SQLFiddle

把加入第一的「僱員」部分是指所有的員工都被列出。

使用離開加入該員工沒有一個老闆(如CEO)仍然會被列出來,但將會對BossNamenull

如果你真的想唯一的僱員上市,如果他們有一個老闆,改變查詢LEFT JOIN簡單JOIN代替(注意,默認的連接類型是INNER

附:格式化您的查詢百利而無一害:

+0

感謝你的建議。但答案不成爲改正它得到的結果作爲ID \t EmpName \t BossName 作者Abhijit \t NULL 哈里斯\t作者Abhijit 薩納爾\t哈里斯 – Haris

+0

糟糕!以錯誤的方式得到了連接。我已更新查詢和sqlfiddle鏈接。重命名錶別名也使得它更清晰。它現在可以正常工作 – Bohemian