2011-03-18 2 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  | 
--------------+-----------+----------+ 

(나는 또한 팀 주장의 이름을 반환 할 필요가 있지만, 조금 더 쉽다) : 보풀을 떠나, 그 구조는 다음과 같다 . 어려움은 내가 라이더에서 마일에 가입하고, "마일"필드를 합산 한 다음, 어떻게 든 팀에 합류해야한다는 것입니다.

테이블 구조를 변경하는 것은 기존 응용 프로그램이므로 거의 바뀝니다. 이것은 램프 환경이므로 쿼리 후 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 고유 가정; 그로 그룹화가 충분해야합니다. –

+0

놀랍게도 대부분의 데이터베이스는 목록별로 그룹에 나타나지 않는 경우 집계되지 않은 열을 선택 목록에 포함시키지 않습니다. –

+0

누군가가 나를 MS Access를 사용하여 쿼리를 작성하라고 요청할 때마다 나를 괴롭 히며 ... –