我已经搜索了stackoverflow但无法得到我的问题的答案。
表1有两列
表2有两列
Manager_id是Employee_id的子集,这反过来意味着Manager的名称将在Employee_name列表中可用。
如何连接两个表以获得结果:employee_id,Employee_name,Manager 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)
您需要第二次加入。
我假设你想要所有员工和经理的名字(如果有的话)。
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 :(得分: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)
我认为WHERE
条款没有意义。试着把它拿出来。这会将您的结果限制在管理自己的员工身上。
另外,请添加表别名。即使没有where子句,也有歧义。
最后,一次加入只会获得经理的ID。要获得他们的名字,您需要第二次加入。
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
答案 3 :(得分: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;
答案 4 :(得分: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;