2016-09-18 114 views
0

我試圖追蹤體育統計數據,我已成立了兩個表如下(隊會改變基礎上,周):從多個表的MySQL精梳選擇

表1:

+---------+---------+---------+---------+ 
| Team | PYardG | RYardG | TDG | 
+---------+---------+---------+---------+ 
| Steelers | 250  | 120   | 3 | 
| Broncos | 200  | 130   | 2 | 
+---------+---------+---------+---------+ 

表2:

+---------+---------+---------+---------+ 
| Week | Team1 | Team2 | Team3 | 
+---------+---------+---------+---------+ 
| Week1 | Steelers | Broncos | Colts | 
| Week2 | Patriots | Giants | Cowboys | 
+---------+---------+---------+---------+ 

理想的情況下我的輸出應該是這樣的:

+---------+---------+---------+---------+ 
| Week1 | PYardG | RYardG | TDG | 
+---------+---------+---------+---------+ 
| Steelers | 250 | 120  | 3 | 
| Broncos | 200  | 130  | 2 | 
+---------+---------+---------+---------+ 

目標是顯示錶1中的統計數據,基於表2中的周和隊名稱。

在做一些研究時,我無法弄清楚子查詢JOIN或UNION是否是我最好的賭注。有沒有方法根據表2中的團隊名稱和星期查找表1中的統計數據?我感謝幫助!

編輯:我很抱歉爲格式不好的表,仍然是全新的。 編輯2:添加了所需的輸出。表1會根據星期而變化,我有一個腳本來存儲我在尋找的星期的統計信息。

+0

它不清楚你想要的輸出是什麼。你能否包括實際數據? –

+0

您的期望輸出僅與第一列的名稱不同,不同於「Table1」。你確定你的數據正確嗎? –

+0

是的,我認爲有一張存儲統計數據的表格和一個按周存儲團隊的表格會比較容易,而不是一張巨大的表格,我必須存儲所有這些數據。 – Speight

回答

0

使用UNION可以將Table2的所有團隊變成一個子查詢的單個列。然後加入與Table1

SELECT t1.team AS Week1, PYardG, RYardG, TDG 
FROM Table1 AS t1 
JOIN (SELECT Team1 AS team FROM Table2 
     WHERE week = 'Week1' 
     UNION 
     SELECT Team2 FROM Table2 
     WHERE week = 'Week1' 
     UNION 
     SELECT Team3 FROM Table2 
     WHERE week = 'Week1') AS t2 
ON t1.team = t2.team 

如果您標準化您的數據,這樣的球隊都在不同的行中Table2,而不是在同一行的多個列會更容易些。然後,你可以簡單地用表連接而不必將列轉換成子查詢的行。

+0

謝謝!我會給這個鏡頭。 – Speight

0

我認爲你需要改變表2 的結構,它可以像

+---------+---------+ 
| Week | Team | 
+---------+---------+ 
| Week1 | Steelers | 
| Week1 | Broncos | 
| Week1 | Colts | 
| Week2 | Patriots | 
+---------+---------+ 

怎麼一回事,因爲如果有三個以上的球隊,那麼你需要改變結構每次,這是不好的數據完整性。

然後您可以使用簡單的選擇查詢來獲取數據。

select t1.Team,t1.PYardG,t1.RYardG,t1.TDG,t2.week from table1 t1,table2 t2 where week ='week1'and t1.team = t2.team;