需要帮助加入两个表,sql

时间:2014-11-11 16:22:58

标签: sql join oracle-sqldeveloper

我已经搜索了stackoverflow但无法得到我的问题的答案。

表1有两列

  1. employee_id
  2. employee_name
  3. 表2有两列

    1. EMPLOYEE_ID
    2. MANAGER_ID
    3. 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; 
      

      请为这种情况提出适当的方法。

      提前致谢。

5 个答案:

答案 0 :(得分:2)

您需要第二次加入。

  • 第一次加入是从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 :(得分: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;