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
中的模式是非规范化的,因为您有重复组,所以这是您可以轻松做到的最好的方式。通常这类事情是用需要递归查询的层次结构来表示的,但它看起来不像您的结构那样。如果您确实需要经理、他或她管理的所有员工,然后是这些员工管理的所有员工,那么情况会变得更加复杂。

您有任何样本数据吗?你试过什么吗?您是否收到任何错误?错误的数据设计请阅读和其他链接,显示一些工作。而且