写一个自联接查询?

时间:2013-07-02 04:47:43

标签: sql join

我的下表有值

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.

但问题是第3名员工(Sanal)没有老板。 所以我想要这个确切的结果:

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

我该怎么办?

3 个答案:

答案 0 :(得分: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

我认为对你来说没问题

答案 1 :(得分:1)

使用LEFT JOIN并颠倒表格的顺序:

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

在SQLFiddle上查看此查询的live demo

将加入的“员工”部分放在首位意味着列出所有员工。

使用 left 加入意味着仍然会列出没有老板的员工(例如CEO),但null列会有BossName

如果您确实只希望列出员工,如果他们有老板,请将查询更改为JOIN而不是LEFT JOIN(请注意默认的加入类型为INNER

P.S。格式化您的查询也不会伤害:

答案 2 :(得分: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