2011-03-18 95 views
1

我有三個現有的SQL表,我們稱之爲「團隊」,「里程」和「騎手」。離開了絨毛,它們的結構是這樣的:複雜3路SQL連接(其中表3必須在連接表1之前連接表2)

Table: teams 
------------+-------------+---------+ 
| team_name | captains_id | team_id | 
------------+-------------+---------+ 
| superbads | 11   | 1  | 
| superflys | 12   | 2  | 
------------+-------------+---------+ 

Table: riders 
--------------+-----------+----------+ 
| rider_name | team_id | rider_id | 
--------------+-----------+----------+ 
| donatello | 1   | 10  | 
| leonardo | 1   | 11  | 
| michelangelo| 2   | 12  | 
| raphael  | 2   | 13  | 
--------------+-----------+----------+ 

Table: miles 
--------------+-----------+----------+ 
| rider_id | miles  | id  | 
--------------+-----------+----------+ 
| 10   | 100  | 1  | 
| 10   | 62  | 2  | 
| 11   | 110  | 3  | 
| 11   | 100  | 4  | 
| 12   | 8   | 5  | 
| 12   | 22  | 6  | 
| 13   | 29  | 7  | 
| 13   | 2   | 8  | 
--------------+-----------+----------+ 

我需要返回與該團隊產生的總里程隊的名單(我還需要返回球隊隊長的名字,但是這是一個更容易一些) 。 難度在於我需要在騎手中加入里程,將「英里數」字段加起來,然後以某種方式加入隊伍。

更改表結構幾乎沒有,因爲這是一個現有的應用程序。這是一個LAMP環境,因此如果需要,在查詢之後操作PHP數組是一個選項。

回答

3

這應做到:

select t.team_id, t.team_name, t.captains_id, sum(m.miles) as total_miles 
from teams t 
inner join riders r on r.team_id = t.team_id 
inner join miles m on m.rider_id = r.rider_id 
group by t.team_id, t.team_name, t.captains_id 
+0

我假設TEAM_ID是獨一無二的;按此分組應該足夠了。 – 2011-03-18 18:48:10

+0

令人驚訝的是,如果這些列沒有出現在分組依據列表中,那麼大多數數據庫都不會讓您在選擇列表中包含非聚合列。 – 2011-03-18 18:50:31

+0

每當有人問我使用MS Access爲他們寫一個查詢時,就會使我瘋狂... – 2011-03-18 20:50:04