我的下表有值
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
我该怎么办?
答案 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