Сложное трехстороннее соединение SQL (где таблица 3 должна присоединиться к таблице 2, прежде чем присоединиться к таблице 1) - PullRequest
1 голос
/ 18 марта 2011

У меня есть три существующие таблицы SQL, которые мы будем называть «командами», «милями» и «гонщиками». Оставляя пух, их структура выглядит так:

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 после запроса является опцией, если это необходимо.

1 Ответ

3 голосов
/ 18 марта 2011

Это должно сделать это:

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
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...