2013-07-02 18 views
8

mam następującą tabelę z wartościamiNapisz zapytanie o samo łączenie?

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); 

Teraz chcę wynikiem stać po

ID EmpName BossName 
1 Abhijit Haris 
2 Haris Sanal 

więc Pisałem następujące zapytanie.

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

Ale problem polega na tym, że trzeci pracownik (Sanal) nie ma szefa. Więc chcę dokładnie ten wynik:

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

co mam zrobić?

+2

Zamień 'wewnętrzne sprzężenie' na ['left outer join'] (http://stackoverflow.com/questions/38549/difference-between-inner-and-outer-join). –

+0

wybrać E1.ID, E1.EmpName, E.EmpName jako BossName z #tmpEmployee E lewym sprzężenia zewnętrznego #tmpEmployee E1 na E1.EmpBossID = E.ID próbuje się jednak prowadziły ID \t EmpName \t BossName NULL \t NULL \t Abhijit Abhijit \t Haris Haris \t Sanal – Haris

+2

Po prostu przełącz na PRAWE sprzężenie. – Curt

Odpowiedz

1

Korzystanie Prawo Dołącz

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 

myślę, że ok u

0

wypróbować ten ...

Użyj lewej Dołącz ..

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

To nie jest poprawne.Dostaję odpowiedź stać ID \t EmpName \t BossName null \t NULL \t Abhijit Abhijit \t Haris Haris \t Sanal – Haris

+0

No to także coraz złej odpowiedzi. Atleast u upewnij się, że wysyłanie cmnt są prawidłowe –

1

użyć LEFT JOIN i odwróć kolejność tabel:

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

Zobacz live demo tego zapytania na SQLFiddle

strzelaj „pracownika” część przyłączenia pierwszej oznacza, że ​​wszyscy pracownicy są wymienione.

używając lewo dołączyć oznacza, że ​​pracownicy bez szefa (np CEO) nadal będą wymienione, ale będzie miał null dla kolumny BossName.

Jeśli naprawdę chcesz tylko pracownik wymieniony jeśli mają szefa, zmienić kwerendę po prostu JOIN zamiast LEFT JOIN (zauważ, że domyślna dołączyć typ jest INNER)

PS: formatowanie zapytania nie boli ani:

+0

Dzięki za porady u. Ale odpowiedź nie stają się coraz to skorygować wynik jako ID \t EmpName \t BossName Abhijit \t NULL Haris \t Abhijit Sanal \t Haris – Haris

+0

Ups! Masz połączenie w niewłaściwy sposób. Zaktualizowałem link zapytania i sqlfiddle. Zmiana nazwy aliasów również uczyniła jaśniejszym. Działa teraz poprawnie – Bohemian