2017-10-20 38 views
-1

我是新來的使用MySQL並被卡在一個查詢,我必須寫。根據美國職業棒球大聯盟的棒球運動員數據庫及其所有統計數據,我需要寫一個查詢,以顯示哪些球員連續三年在波士頓紅襪隊棒球隊效力。這是我到目前爲止有:SQL獲得連續3年參加團隊比賽的玩家

SELECT player.nameFirst, player.nameLast 
FROM player 
WHERE (...something something...) >= 3 
AND player.teamID = "Boston Red Sox" 

除了玩家表,有一個名爲另一個表顯示,其中包含playerID,然後一年中他們打了一個團隊。出現的表格還包含其他信息,例如該季節的統計信息。例如,如果一個玩家爲紅色襪子玩了4年,我們會在出現的表格中看到四行,每行都有一個整數,表示他們在該團隊中玩的年份。

我知道在查詢變得複雜後,我不確定我將如何首先計算球員進入球隊的年數,更不用說如何知道這些年份是否連續。 。謝謝您的幫助!

+3

沒有足夠的信息...其中一些日期字段? –

+0

對不起,請查看我的編輯^ – cheesebal35

+0

查找連續3年沒有進入球隊的球員。 – Strawberry

回答

1

自己加入appears表格兩次,以查找相關年份的外觀。

SELECT DISTINCT a1.playerID 
FROM appears AS a1 
JOIN appears AS a2 ON a1.playerID = a2.playerID AND a1.year = a2.year-1 
JOIN appears AS a3 ON a1.playerID = a3.playerID AND a1.year = a3.year-2 

您可以通過原始查詢加入此子查詢以獲取有關這些玩家的其他信息。

DISTINCT確保我們只返回一次玩家ID,即使他們連續玩了3年以上。

+0

嗯......當我嘗試這個查詢時,我得到一個錯誤,說「在查詢期間丟失與MySQL服務器的連接」。這可能是查詢需要太長的時間來計算?畢竟我與這些表格非常大。 – cheesebal35

+0

如果它很大,請在「年份」列中添加一個索引。 – Barmar

+0

@ cheesebal35用另一個簡單的查詢來驗證與MySQL的連接。同時驗證字段的名稱是否正確。 –

1

繼@ Barmar的指示,您應該查詢看起來是這樣的:

SELECT DISTINCT player.nameFirst, player.nameLast 
FROM player 
INNER JOIN (
    SELECT DISTINCT a1.playerID 
    FROM appears AS a1 
    JOIN appears AS a2 ON a1.year = a2.year-1 
    JOIN appears AS a3 ON a1.year = a3.year-2 
) AS ap ON player.playerID = ap.playerID 
WHERE player.teamID = "Boston Red Sox" 
+0

這個查詢看起來不錯,我認爲在我的機器上執行時間太長,每次運行30秒後都會失敗 – cheesebal35

+1

請參閱編輯我的答案,我忘了在自聯接中使用球員ID。 – Barmar

+0

好點@Barman;) –