如何使用多列的外部连接从 master table 获取数据
how to get data from master table using outer join for muliple columns
我有两个table
employees (id, employee_name, hire_date ...)
第二个 table 数据链接经理与 3 名员工(最多),或两名或一名员工。
Emp_Managed (mgr_id, emp1, emp2, emp3,
mgr_id references employees id,
emp1 references employees id,
emp2 references employees id,
emp3 references employees id,
)
我希望 select 来自 emp_managed 的所有数据不显示 ID,而是显示姓名和雇用日期。
我想通过 join 或其他方式(但不使用 select in select条款)
我该怎么做?
你想要这样的东西吗?
select E.employee_name,E2.employee_name,E3.employee_name,E4.employee_name from Emp_Managed EM
inner join employees E ON EM.mgr_id = E.id
inner join employees E2 ON EM.emp1 = E2.id
inner join employees E3 ON EM.emp2 = E3.id
inner join employees E4 ON EM.emp3 = E4.id
我将从下面的查询开始。关键是使用 table 别名,这样您就可以多次使用相同的 table JOIN。
SELECT mgr.id AS manager_id,
mgr.employee_name AS manager_name,
mgr.hire_date AS manager_hire_date,
e1.id AS emp1_id,
e1.employee_name AS emp1_name,
e1.hire_date AS emp1_hire_date,
e2.id AS emp2_id,
e2.employee_name AS emp2_name,
e2.hire_date AS emp2_hire_date,
e3.id AS emp3_id,
e3.employee_name AS emp3_name,
e3.hire_date AS emp3_hire_date
FROM Employees mgr
INNER JOIN Emp_Managed em
ON em.mgr_id = mgr.id
LEFT OUTER JOIN Employees e1
ON e1.id = em.emp1
LEFT OUTER JOIN Employees e2
ON e2.id = em.emp2
LEFT OUTER JOIN Employees e3
ON e3.id = em.emp3
WHERE mgr.id = 1
我选择对员工使用 LEFT OUTER JOIN,以防您允许这些字段为空。
您在 Emp_Managed
中的架构是非规范化的,因为您有重复的组,所以这是您可以轻松完成的最佳操作。通常这种东西用需要递归查询的层次结构来表示,但它看起来不像你的结构那样。如果您确实遇到需要经理、他或她管理的所有员工,然后是这些员工管理的所有员工的情况,事情就会变得更加复杂。
我有两个table
employees (id, employee_name, hire_date ...)
第二个 table 数据链接经理与 3 名员工(最多),或两名或一名员工。
Emp_Managed (mgr_id, emp1, emp2, emp3,
mgr_id references employees id,
emp1 references employees id,
emp2 references employees id,
emp3 references employees id,
)
我希望 select 来自 emp_managed 的所有数据不显示 ID,而是显示姓名和雇用日期。
我想通过 join 或其他方式(但不使用 select in select条款)
我该怎么做?
你想要这样的东西吗?
select E.employee_name,E2.employee_name,E3.employee_name,E4.employee_name from Emp_Managed EM
inner join employees E ON EM.mgr_id = E.id
inner join employees E2 ON EM.emp1 = E2.id
inner join employees E3 ON EM.emp2 = E3.id
inner join employees E4 ON EM.emp3 = E4.id
我将从下面的查询开始。关键是使用 table 别名,这样您就可以多次使用相同的 table JOIN。
SELECT mgr.id AS manager_id,
mgr.employee_name AS manager_name,
mgr.hire_date AS manager_hire_date,
e1.id AS emp1_id,
e1.employee_name AS emp1_name,
e1.hire_date AS emp1_hire_date,
e2.id AS emp2_id,
e2.employee_name AS emp2_name,
e2.hire_date AS emp2_hire_date,
e3.id AS emp3_id,
e3.employee_name AS emp3_name,
e3.hire_date AS emp3_hire_date
FROM Employees mgr
INNER JOIN Emp_Managed em
ON em.mgr_id = mgr.id
LEFT OUTER JOIN Employees e1
ON e1.id = em.emp1
LEFT OUTER JOIN Employees e2
ON e2.id = em.emp2
LEFT OUTER JOIN Employees e3
ON e3.id = em.emp3
WHERE mgr.id = 1
我选择对员工使用 LEFT OUTER JOIN,以防您允许这些字段为空。
您在 Emp_Managed
中的架构是非规范化的,因为您有重复的组,所以这是您可以轻松完成的最佳操作。通常这种东西用需要递归查询的层次结构来表示,但它看起来不像你的结构那样。如果您确实遇到需要经理、他或她管理的所有员工,然后是这些员工管理的所有员工的情况,事情就会变得更加复杂。