【问题标题】:SQL Join using a Junction Table not returning expected results使用连接表的 SQL 连接未返回预期结果
【发布时间】: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


【解决方案1】:

如果我理解正确,您需要再次加入您的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;

注意:如图所示,我强烈推荐使用短表别名,因为它们使查询更加清晰。

【讨论】:

    猜你喜欢
    • 2015-11-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2017-01-20
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多