2017-04-21 44 views
2

我目前正在处理MS SQL Server 2012中的一个复杂的T-SQL查询。我基本上检索了一个基本的项目列表,其中包含ProjectId以及StaffVersionId(这是可能的工作人员在整个项目中都会改变,但我希望情况不会如此:P)。T-SQL Multiple Join on 1表

CREATE TABLE #BasicProjects 
    (
     ProjectId INT 
     , StaffVersionId INT 
    ) 

接下来,我需要加入对ProjectData的表来获得该项目的名称,以及加入的员工表,以获得员工的全名。

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 =联系。

当我运行我的查询,我得到这个错误:

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

你知道如何解决这个错误吗?或者,也许建议如何改善此查询?

非常感谢!

回答

2

你需要为每个不同的别名加入(就像你为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 
+0

哈,不错!确实是这样!非常感谢,祝你周末愉快! – TimHorton

+0

@TimHorton乐意帮忙! – SqlZim