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.

しかし問題は、3 番目の従業員 (Sanal) には上司がいないことです。だから私はこの正確な結果が欲しい:

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

私は何をすべきか?

4

3 に答える 3

1

a を使用してLEFT JOIN、テーブルの順序を逆にします。

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

SQLFiddle でこのクエリのライブ デモを見る

結合の「従業員」の部分を最初に置くことは、すべての従業員がリストされることを意味します。

結合を使用すると、ボスのいない従業員 (CEO など) もリストされますnullが、BossName列には があります。

上司がいる従業員のみを本当にリストしたい場合は、クエリを単に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 に答える