2016-08-01 2 views
1

У меня есть головоломка, когда я присоединяюсь к столу. Я просто не могу разобраться.Oracle Self Join и связь с другой таблицей

Например, у меня есть таблица Employee со всеми записями сотрудников. У меня есть временная таблица с двумя полями: идентификатор сотрудника 1 и идентификатор сотрудника 2. Эта временная таблица хранит связь между двумя сотрудниками. (Это временная таблица, потому что она регулярно обновляется).

Теперь я хочу отображать информацию о сотрудниках в одной строке в качестве вывода. Я могу присоединиться к себе, но когда дело доходит до ссылки на временную таблицу, я смущаюсь.

Сотрудник Таблица:

Emp_ID Emp_Name Status Joined_Date 
111  Jack  On_Leave 01/01/2000 
222  Smith  Working 02/02/2000 
333  Joan  Working 03/03/2001 
444  Emily  On_Leave 04/04/2001 
555  Mark  Working 05/05/2002 

Временная таблица:

Emp_ID_1 Emp_ID_2 
111  222 
222  555 

Теперь выход я пытаюсь получить это:

Emp_ID_1 Emp_Name_1 Status_1 Joined_date_1 Emp_ID_2 Emp_Name_2 Status_2 Joined_date_2 
111  Jack  On_Leave 01/01/2000 222  Smith  Working 02/02/2000 
222  Smith  Working 02/02/2000 555  Mark  Working 05/05/2001 

Это упрощенный пример, как мой фактический Таблица Employee имеет много дополнительных столбцов для отображения для обоих сотрудников.

ответ

2

Самостоятельное присоединение не имеет ничего магического. Вы присоединяетесь к двум таблицам, которые, как оказалось, являются одной и той же таблицей, поэтому вам абсолютно необходимо использовать псевдонимы таблиц, чтобы различать их. В вашем случае:

SELECT e1.*, e2.* 
FROM employee e1 
JOIN temp_table t ON e1.emp_id = t.emp_id_1 
JOIN employee e2 ON t.emp_id_2 = e2.emp_id 
+1

Я чувствую себя немного глупо сейчас, чтобы усложнить ситуацию. Спасибо за решение! – user3144072