Sql server 如何使用多列的外部联接从主表获取数据
我有两张桌子Sql server 如何使用多列的外部联接从主表获取数据,sql-server,outer-join,Sql Server,Outer Join,我有两张桌子 employees (id, employee_name, hire_date ...) 第二个表数据链接管理器,最多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, ) 我
employees (id, employee_name, hire_date ...)
第二个表数据链接管理器,最多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,
)
我想从emp_管理中选择所有数据,不显示ID,而是姓名和雇用日期
我想通过使用join或其他方式(但不使用select子句中的select)获取经理和该经理管理的所有员工的姓名和聘用信息,这些员工是emp1、emp2、emp3
我怎么能这样做呢?你想要那样的东西吗
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
我将从下面的查询开始。关键是使用表别名,以便可以多次使用同一个表进行连接
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
我已经选择为员工使用左外部联接,以防您允许这些字段为空
Emp_Managed
中的模式是非规范化的,因为您有重复组,所以这是您可以轻松做到的最好的方式。通常这类事情是用需要递归查询的层次结构来表示的,但它看起来不像您的结构那样。如果您确实需要经理、他或她管理的所有员工,然后是这些员工管理的所有员工,那么情况会变得更加复杂。您有任何样本数据吗?你试过什么吗?您是否收到任何错误?错误的数据设计请阅读和其他链接,显示一些工作。而且