2016-08-10 65 views
-1

SQL新手,但我想通過引入適量的數據來優化查詢。我在CS Rep Name和WE上進行了左連接,這兩個表中都有兩列。我發現如果我沒有在TECDR表中引入CS Rep Name和WE,那麼查詢就會出錯。有沒有解決這個問題的方法?由於它是左連接,因此我不需要冗餘數據。我可以在不返回條件列的情況下進行左連接嗎?

SELECT * 
FROM Tish_Email_CSAT_Dump AS TECD 
     LEFT JOIN (SELECT CS_Rep_Name, 
         Team_Leader, 
         Operations_Manager, 
         Tenure, 
         WE, 
         FileName 
        FROM Tish_Email_CSAT_Dump_Roster) AS TECDR 
     ON TECD.CS_Rep_Name = TECDR.CS_Rep_Name 
      AND TECD.WE = TECDR.WE 
+1

你是什麼意思,「不要在TECDR表中引入CS代號和我們?」,你究竟希望結果如何? – Lamak

+0

不要使用'select *'。選擇你需要的列。 –

+0

避免子查詢,直接加入這兩個表。然後限制數據量取代select *表示真正需要的列 – vercelli

回答

2
select 
    <place the columns you want here> 
from 
    Tish_Email_CSAT_Dump as TECD 
    Left join Tish_Email_CSAT_Dump_Roster as TECDR 
    On TECD.CS_Rep_Name = TECDR.CS_Rep_Name and TECD.WE = TECDR.WE 
+0

作品和謝謝你! – Zeta

3

當你在一個地方臺的嵌入SELECT查詢內,選擇(投影)的結果表現得像只查詢中可見的表。

對於您的情況,聯接與您選擇的列有名爲TECDR的表相同。因此,如果您從SELECT中刪除了Tish_Email_CSAT_Dump_Roster的某些列,則這些列將無法加入或選擇。

然而,在你的情況下,這是不必要的:所有你需要做的是加入到基礎表,就像這樣:

SELECT 
    TECD.* 
, TECDR.Team_Leader 
, TECDR.Operations_Manager 
, TECDR.Tenure 
, TECDR.FileName 
FROM Tish_Email_CSAT_Dump AS TECD 
LEFT JOIN Tish_Email_CSAT_Dump_Roster AS TECDR 
     ON TECD.CS_Rep_Name = TECDR.CS_Rep_Name AND TECD.WE = TECDR.WE 
+0

@GordonLinoff非常感謝您指出這一點!這現在已經修復。 – dasblinkenlight

+0

這對我有意義,並幫助我理解我做錯了什麼。謝謝。而不是選擇*我進一步縮小了我的查詢。 – Zeta

1

希望下面的幫助,否則請分享查詢的錯誤:

選擇TECD.Column1,TECD.Column2,TECDR.Column1,TECDR.Column2 從Tish_Email_CSAT_Dump作爲TECD LEFT JOIN Tish_Email_CSAT_Dump_Roster作爲TECDR 在TECD.CS_Rep_Name = TECDR.CS_Rep_Name和TECD.WE = TECDR.W E

相關問題