2015-02-23 4 views
0

У меня есть пример, где в таблице есть ID, NAme и M_if (managerID). Я заполнил таблицу следующим образомРабота левого соединения

Id Name M_id 
1 A  2 
2 B NUll 
3 C  1 
4 D  3 
5 E  2 

Идентификатор сотрудника, имя и идентификатор M_id - это идентификатор менеджера. В приведенном выше примере менеджер A - 2 (B), B не имеет менеджера, менеджер C - 1 (A) и так далее. Мне нужно узнать имена сотрудников и их менеджеров. Я написал следующий запрос, выполнив перестановки и комбинации, которые дают мне правильный результат, но я не могу понять, как работает запрос (левое соединение). Пожалуйста, объясните мне концепцию.

SELECT (e.Name), ee.name FROM test.employee e 
left join test.employee ee on ee.Id = e.M_id 
order by e.Id; 

результат я получаю

A B 
B 
C A 
D C 
E B 

Пожалуйста, объясните мне совместные

+0

вы должны использовать автообъединение вместо левой присоединиться. – Prashant

+0

@Prashant: Почему? Это прекрасно работает. –

+0

@Prashant:: Пожалуйста, объясните мне, как работает левое соединение. – user2998990

ответ

0

два экземпляра есть за одним столом:

e 
Id Name M_id 
1 A  2 
2 B NUll 
3 C  1 
4 D  3 
5 E  2 

ee 
Id Name M_id 
1 A  2 
2 B NUll 
3 C  1 
4 D  3 
5 E  2 

согласно вашему условия соединения on ee.Id = e.M_id

просто первая строка экземпляра e будет выбрана из-за левого соединения, а e.M_id будет сравниваться с ee.Id и 2-й строкой будут выбраны из второго экземпляра той же таблицы.

выбор данных как таблицы, как:

e.Id e.Name e.M_id | ee.Id ee.Name ee.M_id 1 A 2 | 2 B NUll 2 B NUll | 3 C 1 | 1 A 2 4 D 3 | 3 C 1 5 E 2 | 2 B NUll

, поэтому она показывает

A B

Смежные вопросы