对不同列的相同 table 查询两次

Query twice on same table for different columns

SQL 服务器 2008:

我有一个员工和经理的层次结构(都有员工 ID 号)。老板是爱丽丝和比尔的经理...爱丽丝是克劳迪娅和蒂姆的经理...比尔是弗雷德的经理

              The Boss (100)
                    |
           +------------------+
           |                  |
      Alice(101)           Bill(102)
           |                  |
     +-----------+            |
Claudia(103)  Tim(104)     Fred(105)

Table 明智的是,有两个 table 一个 empl master table (employee_peeps),然后是一个 table 经理与员工关系 ( manager_codes)。 table 看起来像这样:

employee_peeps:            manager_codes
badge_ID  emplName         badge_ID  manager_ID
--------  --------         --------  ----------
100       The Boss         100       0
101       Alice            101       100
102       Bill             102       100
103       Claudia          103       101
104       Tim              104       101
105       Fred             105       102

我正在尝试查询主 table 两次 - 一次查询员工姓名,然后再次查询同一行中经理的姓名。我已尝试遵循 joining the same table twice on different columns 中的逻辑,但似乎无法使任何事情发生。我要找的是这个:

Desired result:

badge_ID  Employee  Manager
--------  --------  -------
100       The Boss  {null}
101       Alice     The Boss
102       Bill      The Boss
103       Claudia   Alice
104       Tim       Alice
105       Fred      Bill

我们有300名员工...理论上只有公司总裁没有老板。有没有办法在一个 SQL 语句中查询员工姓名,然后再次点击主 table 以在同一结果行中获取经理的姓名?

这里有一些用于制作此示例的 table 的可用代码:

CREATE TABLE employee_peeps
    ([badge_ID] int, [emplName] varchar(15))
;
INSERT INTO employee_peeps
    ([badge_ID], [emplName])
VALUES
    (100, 'The Boss'),
    (101, 'Alice'),
    (102, 'Bill'),
    (103, 'Claudia'),
    (104, 'Tim'),
    (105, 'Fred')
;
CREATE TABLE manager_codes
    ([badge_ID] int, [manager_ID] int)
INSERT INTO manager_codes
    ([badge_ID], [manager_ID])
VALUES
    (100,0),
    (101,100),
    (102,100),
    (103,101),
    (104,101),
    (105,102)
;

谢谢, 约翰

select 
e.badge_id, e.emplName, t.manager_id, t.managerName
from employee_peeps e
outer apply (select m.manager_id,
             e2.emplName 
             from manager_codes m
             inner join employee_peeps e2 on m.manager_id = e2.badge_id
             where m.badge_id = e.badge_id
             ) t (manager_id, managerName);

我知道这已经得到解答(谢谢@cetin basoz),但我回到 joining the same table twice on different columns 再次尝试解决这个问题。我下载了 FlySpeed 并尝试通过将 employee_peeps table 拖到生成器中两次来直观地构建查询(对于第二个实例,如 employee_peeps1)。构建器确实以与其他 post 相同的格式构建了带有两个内部联接的语句 - 并且它有效。再次感谢大家的帮助。

SELECT
  employee_peeps.badge_ID,
  employee_peeps.emplName,
  manager_codes.manager_ID,
  employee_peeps1.emplName AS emplName1
FROM
  employee_peeps
  INNER JOIN manager_codes ON manager_codes.badge_ID =
    employee_peeps.badge_ID
  INNER JOIN employee_peeps employee_peeps1 ON
    employee_peeps1.badge_ID = manager_codes.manager_ID