【问题标题】:T-SQL Multiple Join on 1 Table1 个表上的 T-SQL 多重连接
【发布时间】:2017-09-18 18:11:04
【问题描述】:

我目前正在 MS SQL Server 2012 中处理复杂的 T-SQL 查询。我基本上检索项目的基本列表,其中包含 ProjectId 以及 StaffVersionId(员工可能在整个项目中发生变化,虽然我希望不会是这样 :P )。

CREATE TABLE #BasicProjects
    (
        ProjectId INT
        , StaffVersionId INT
    )

接下来我需要加入 ProjectData 表以获取项目的标题,并加入 Employee 表以获取员工的全名。

SELECT [P].ProjectId
    , [PD].Label AS Title
    , [E].Lastname + '' '' + Firstname AS Manager
    , [E].Lastname + '' '' + Firstname AS Contact
    FROM #BasicProjects [P]
    INNER JOIN [MySchema].[ProjectData] [PD] ON [PD].ProjectDataId = [P].ProjectDataId 
    INNER JOIN [MySchema].[Staff] [Y] ON [Y].StaffVersionId = [P].StaffVersionId AND [Y].StaffTypeId = 3 // Manager
    INNER JOIN [MySchema].[Staff] [X] ON [X].StaffVersionId = [P].StaffVersionId AND [X].StaffTypeId = 2 // Contact
    INNER JOIN [dbo].[Employee] [E] ON [E].EmployeeId = [Y].EmployeeId
    INNER JOIN [dbo].[Employee] [E] ON [E].EmployeeId = [X].EmployeeId

查询有点难,因为我有 2 种员工员工 3 = 经理,2 = 联系人。

当我运行我的查询时,我收到了这个错误:

在 FROM 子句中多次指定相关名称“E”。

你知道如何解决这个错误吗?或者关于如何改进这个查询的一些建议?

非常感谢!

【问题讨论】:

    标签: sql-server tsql join


    【解决方案1】:

    您需要为每个连接使用不同的别名(就像您为 Staff 所做的那样)

    SELECT [P].ProjectId
        , [PD].Label AS Title
        , [YE].Lastname + ' ' + YE.Firstname AS Manager
        , [XE].Lastname + ' ' + XE.Firstname AS Contact
        FROM #BasicProjects [P]
        INNER JOIN [MySchema].[ProjectData] [PD] ON [PD].ProjectDataId = [P].ProjectDataId 
        INNER JOIN [MySchema].[Staff] [Y] ON [Y].StaffVersionId = [P].StaffVersionId AND [Y].StaffTypeId = 3 // Manager
        INNER JOIN [MySchema].[Staff] [X] ON [X].StaffVersionId = [P].StaffVersionId AND [X].StaffTypeId = 2 // Contact
        INNER JOIN [dbo].[Employee] [YE] ON [YE].EmployeeId = [Y].EmployeeId
        INNER JOIN [dbo].[Employee] [XE] ON [XE].EmployeeId = [X].EmployeeId
    

    【讨论】:

    • 哈,不错!确实是这样!非常感谢,周末愉快!
    • @TimHorton 乐于助人!
    猜你喜欢
    • 1970-01-01
    • 2018-12-12
    • 1970-01-01
    • 2021-12-08
    • 2014-10-06
    • 2011-05-13
    • 2017-09-18
    • 2016-12-22
    • 2011-10-23
    相关资源
    最近更新 更多