2017-04-21 119 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