sql - 使用连接表的 SQL 连接未返回预期结果
问题描述
为了将用户映射到他们的经理,我在 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
而不是员工的名字。
解决方案
如果我理解正确,您需要第二次加入您的dbo.Employee_Records
餐桌以获取主管的详细信息。
select
ER.EMPLOYEE_NAME as AD_NAME,
ER.[NAME] as [NAME],
M.KEYWORD as SUPERVISOR_FULLNAME,
MR.EMPLOYEE_NAME as SUPERVISOR_ADNAME
from dbo.Employee_Records as ER
left outer join dbo.Employee_Records_MANAGER_S_ as M on ER.ID = S.ID
left join dbo.Employee_Records as MR on MR.[NAME] = M.KEYWORD;
注意:如图所示,我强烈推荐使用短表别名,因为它们使查询更加清晰。
推荐阅读
- python - 试图将两个 excel 连接到另一个 excel
- java - PropertyAccessException 通过反射访问持久属性的字段时出错
- asynchronous - spring batch:异步执行作业时CustomItemWriter中的NullPointerException
- c# - 如何保持拦截器相互关联?
- bash - 为什么支票没有像我预期的那样工作?
- javascript - 无法以编程方式在循环中重置 vuetify v-select
- hardware - 是否可以使用外部 SIM 卡读卡器连接到蜂窝网络?
- jquery - 如何根据jQuery中对象数组的比较来更改键值?
- php - 如何在 laravel 6 中向多个表中插入数据
- django - 已删除 已解决,不再需要