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

我应该怎么办?

4

3 回答 3

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

我觉得你没问题

于 2013-07-02T04:56:20.610 回答
1

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

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

在 SQLFiddle 上查看此查询的实时演示

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

使用连接意味着没有老板的员工(例如 CEO)仍然会被列出,但会有一个nullforBossName列。

如果您确实希望仅列出有老板的员工,请将查询更改为简单JOIN而不是LEFT JOIN(请注意,默认联接类型是INNER

ps 格式化您的查询也不会受到伤害:

于 2013-07-02T05:00:08.020 回答
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
于 2013-07-02T05:00:00.807 回答