【发布时间】:2021-07-15 00:38:24
【问题描述】:
为了将用户映射到他们的经理,我在 SQL Server 中加入了 3 个表。联结表的目的是将他们的完整用户名映射到他们的网络 ID。这是查询:
select
dbo.Employee_Records.EMPLOYEE_NAME as AD_NAME,
dbo.Employee_Records.NAME as NAME,
dbo.Employee_Records_MANAGER_S_.KEYWORD as SUPERVISOR_FULLNAME,
dbo.employee_records.EMPLOYEE_NAME as SUPERVISOR_ADNAME
from
dbo.Employee_Records
left outer join dbo.Employee_Records_MANAGER_S_ on
dbo.Employee_Records.ID = dbo.Employee_Records_MANAGER_S_.ID
left join dbo.Employee_Records_MANAGER_S_ as ManagersList on
ManagersList.KEYWORD = dbo.employee_records.name
前 3 列按我的预期显示,显示网络 ID、完整用户名和经理的全名。但是,第 4 列是问题所在。它显示的是用户的网络 ID,而不是管理员。
看起来像这样:
AD_NAME | NAME | SUPERVISOR_FULLNAME | SUPERVISOR_ADNAME
USER1 | User, Test | Supervisor, Test | USER1
USER1 | User, Test | Supervisor2, Test | USER1
应该是这样的:
AD_NAME | NAME | SUPERVISOR_FULLNAME | SUPERVISOR_ADNAME
USER1 | User, Test | Supervisor, Test | SUPERVISOR1
USER1 | User, Test | Supervisor2, Test | SUPERVISOR2
Employee.Records 表包含所有完整的用户名和完整的主管姓名。 The Employee.Records_MANAGER_S_ 表用于将主管与用户联系起来,因为每个用户可以有多个主管。网络名称和全名的所有映射也在Employee.Records 表中,所以从技术上讲,我正在尝试将Employee.Records 表加入Employee_Records_MANAGER_S_,然后再将Employee_Recors_MANAGER_S_ 加入到Employee.Records 表再次加入,但这次加入 SUPERVISOR_FULLNAME 而不是员工的姓名。
【问题讨论】:
-
请将样本数据、实际结果和期望结果显示为格式化文本。
-
我强烈推荐使用表别名。
-
添加了一些额外的信息,希望能更好地解释我想要做的事情。
-
“因为每个用户可以有多个主管”所以如果一个用户有多个主管,期望的结果是什么?两排?还是主管列中有两个名字?
-
2 行
标签: sql sql-server tsql join