2014-11-11 4 views
1

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

Таблица 1 содержит два столбца

  1. EMPLOYEE_ID
  2. employee_name

Таблица 2 содержит два столбца

  1. EMPLOYEE_ID
  2. Manager_id

Manager_id - это подмножество Employee_id, что, в свою очередь, означает, что имя Менеджера будет доступно в списке Employee_name.

Как присоединиться к обеим таблицам, чтобы получить результат, например: employee_id, Employee_name, имя менеджера.

Мой запрос:

SELECT employee_id, 
     employee_name, 
     manager_id AS manager_name 
FROM table1 
     LEFT JOIN table2 
       ON table1.employee_id = table2.employee_id 
WHERE manager_id = employee_id; 

Пожалуйста, предложить соответствующий подход к этой ситуации.

Заранее спасибо.

+0

вам нужно 2-ой присоединиться. 1-е соединение - от t1 до t2, чтобы получить менеджера сотрудника. следующее соединение будет от t2 до t1 снова, чтобы получить имя ясли. – xQbert

ответ

2

Вы должны присоединиться обратно table1:

select 
    employees.employee_name.employee_id, 
    employees.employee_name, 
    managers.employee_name as manager_name 
from table1 as employees 
    left join table2 
     on table2.employee_id = employees.employee_id 
    left join table1 as managers 
     on managers.employee_id = table2.manager_id 

Кроме того, так как вы уже фильтрации до соответствия менеджеров по JOIN статей, вы можете исключить WHERE из исходного запроса.

2

Вам нужно 2-е соединение.

  • 1-е соединение от t1 до t2, чтобы получить менеджера сотрудника.
  • Следующее соединение будет от t2 до t1 снова, чтобы получить имя ясли.

Я предполагаю, что вы хотите, чтобы все сотрудники и имя ясли были определены.

SELECT emp.employee_id, 
     emp.employee_name, 
     mgr.employee_name AS manager_name 
FROM table1 Emp 
LEFT JOIN table2 t2 
ON emp.employee_id = t2.employee_id 
LEFT JOIN table1 mgr 
on mgr.employee_Id = t2.manager_Id 

- Для чего это?

WHERE manager_id = employee_id; 
+1

Какая потребность в том, где условие –

+0

вы избили меня до этого, я не знаю. – xQbert

+0

не требуется. Вы уже присоединились к нему. –

2

Я не думаю, что статья WHERE имеет смысл. Попытайтесь взять это. Это ограничит ваши результаты сотрудниками, которые сами справятся.

Также добавьте псевдонимы таблицы. Даже без предложения where существует двусмысленность.

Наконец, одно соединение просто получает идентификатор менеджера. Чтобы получить свое имя, вам нужно второе соединение.

SELECT emp.employee_id, 
     emp.employee_name, 
     mgr.employee_name AS manager_name 
FROM table1 emp 
     LEFT JOIN table2 map 
       ON map.employee_id = emp.employee_id 
     LEFT JOIN table1 mgr 
       ON mgr.employee_id = map.manager_id 
+0

Спасибо всем за ваши ценные предложения и ответы. +1 :) –

1

Попробуйте рекурсивное объединение, используя псевдоним:

select a.employee_id, a.employee_name, b.manager_id, c.employee_name as manager_name 
from table1 a 
left join table2 b on b.employee_id = a.employee_id 
left Join table1 c on c.employee_id = b.manager_id; 
0
SELECT t1.employee_id, 
     t1.employee_name, 
     t2.manager_id AS manager_name 
FROM table1 t1, table2 t2    
WHERE t2.employee_id = t1.employee_id; 
Смежные вопросы