2017-11-11 28 views
0

我有一個表列出了一堆時間表(TK.DETAIL)。MSSQL兩個內部連接到同一個表

在該表中所引用的員工ID,我可以成功地使用從員工表(EMMain)拉頭名和姓

的TK.DETAIL表也顯示了我一個項目ID和我可以通過INNER加入項目表(PR)獲得該項目的主管ID。

我想要做的就是加入公關公司和EMMain表獲得主管的名字和姓氏。

我當前的查詢爲我提供了與僱員ID相同的名字和姓氏。

我在做什麼錯。

SELECT  tkDetail.Employee, tkDetail.WBS1, tkDetail.WBS2, tkDetail.LineItemApprovalStatus, tkDetail.LineItemApprover, PR.Supervisor, EMMain.LastName, EMMain.FirstName,EMMain.FirstName AS SupervisorFirst, EMMain.LastName AS supervisorlast 
FROM   tkDetail INNER JOIN 
         PR ON tkDetail.WBS1 = PR.WBS1 INNER JOIN 
         EMMain ON tkDetail.Employee = EMMain.Employee INNER JOIN 
         EMMain AS EMPL ON PR.Supervisor = EMMain.Employee 

WHERE (LineItemApprovalStatus is NULL) 
+0

你確定第二次加入「AND PR.Supervisor = EMMain.Employee」嗎? 這意味着EMMain.Employee = tkDetail.Employee = PR.Supervisor – Radu

+0

這就是我不知道的。 EMMain.Employee是員工ID。 tkDetail.Employee和PR.Supervisor也是員工ID – Ankh2054

+0

嘗試使用以下內容獲取Supervisor Firstname和Kastname。 EMMain.FirstName AS SupervisorFirst,EMMain.LastName AS supervisorlas – Ankh2054

回答

1

請參閱如果不加入幫助和照顧的是在第三次加入時你應該使用EMPL別名而不是表名再次

 SELECT tkDetail.Employee, tkDetail.WBS1, tkDetail.WBS2, 
    tkDetail.LineItemApprovalStatus, tkDetail.LineItemApprover, 
    PR.Supervisor, EMMain.LastName, EMMain.FirstName,SUP.FirstName AS 
     SupervisorFirst, SUP.LastName AS supervisorlast 
FROM tkDetail 
INNER JOIN PR ON tkDetail.WBS1 = PR.WBS1 
left JOIN EMMain ON tkDetail.Employee = EMMain.Employee 
left JOIN EMMain SUP ON PR.Supervisor = SUP.Employee WHERE (LineItemApprovalStatus is NULL) 
+0

嗨拉杜,不stil不好。我已經嘗試了右,左/左,左/左,RGITH /右,右。 – Ankh2054

+0

我想我找到了:) 在選擇字段列表中,我更改爲SUP.FirstNAme和SUP.LASTNAME,並在最後一個左側加入我已更改爲SUP別名,請參閱我的回答編輯:) – Radu

+0

感謝Radu,你是男人! – Ankh2054

0

沒有數據還很難說,但嘗試做這樣的

SELECT * 
FROM tkDetail 
INNER JOIN PR ON tkDetail.WBS1 = PR.WBS1 
INNER JOIN EMMain PR.Supervisor = EMMain.Employee 
WHERE (LineItemApprovalStatus is NULL) 
0

也許它會像那:

SELECT tkDetail.Employee, tkDetail.WBS1, tkDetail.WBS2, tkDetail.LineItemApprovalStatus, tkDetail.LineItemApprover, PR.Supervisor, EMMain.LastName, EMMain.FirstName,EMMain.FirstName AS SupervisorFirst, EMMain.LastName AS supervisorlast 
    FROM tkDetail INNER JOIN 
    EMMain ON tkDetail.Employee = EMMain.Employee INNER JOIN 
    PR ON tkDetail.WBS1 = PR.WBS1 AND EMMain.Employee = PR.Supervisor 
    WHERE (LineItemApprovalStatus is NULL) 
+0

對不起,它然後更改supervisorID以匹配員工ID – Ankh2054

+0

是從您的問題的第一個版本是相同的條件:) – Radu

+0

嘗試使用最後兩個左連接加入:) SELECT tkDetail.Employee,tkDetail.WBS1,tkDetail.WBS2,tkDetail.LineItemApprovalStatus,tkDetail.LineItemApprover,PR.Supervisor,EMMain.LastName,EMMain.FirstName,EMMain.FirstName AS SupervisorFirst,EMMain.LastName AS supervisorlast FROM tkDetail INNER JOIN PR ON tkDetail.WBS1 = PR.WBS1 LEFT JOIN EMMain ON tkDetail.Employee = EMMain.Employee LEFT JOIN EMMain AS EMPL ON PR.Supervisor = EMMain.Employee WHERE(李neItemApprovalStatus是NULL) – Radu