2012-02-19 2 views
0

Итак, у меня есть запрос, который требует того, что я считаю сложным JOIN. У меня есть три таблицы, которые являются «детьми» друг друга. Верхняя таблица - «clan_members». Следующий - «roster_members», который получает идентификатор clan_member. Нижним является «match_players», который получает идентификатор roster_members. Я написал цикл, который передает мне все результаты в таблице clan_members. . То, что я хочу сделать, это выяснить, сколько матчей, что член клана играл в Вот макеты трех таблиц:MySQL Left Join With Three Tables

[clan_members] 
    -id 
    - member_id 
    -join_date 

[roster_members] 
    - id 
    - clan_member_id 
    - title 

[match_players] 
    - id 
    - roster_member_id 
    - match_id 

Я никогда не делал JOIN с тремя различными таблицами раньше, и я понятия не имею, что чтобы сделать их. Я был бы очень признателен, если бы кто-нибудь мог написать мне запрос!

+1

Заказ не имеет значения, и сообщество SO предпочитает, чтобы вы продемонстрировали, что вы что-то пробовали, прежде чем спрашивать. –

+0

@OMGPonies: для 'INNER JOIN', no. Для 'LEFT JOIN', да. –

ответ

0

Этот запрос будет получить вам количество матчей, что член клана с идентификатором 123 участвовал в:

select count(*) as match_count 
from clan_members c, roster_members r, match_players m 
where c.member_id = r.clan_member_id 
and r.id = m.roster_member_id 
and c.id = 123 

На стороне записки, было бы хорошая практика назвать столбцы последовательно. Например, все столбцы с именем clan_member_id должны быть одинаковыми. В таблице clan_members указан его идентификатор, но в таблице roster_members его называют clan_member_id. Просто упрощает понимание того, как таблицы объединяются.

0
SELECT DISTINCT match_id 
    FROM clan_members 
    INNER JOIN roster_members 
     ON clan_members.id = roster_members.clan_member_id 
    INNER JOIN match_players 
     ON roster_members.id = match_players.roster_member_id; 

получит вам # уникальных match_id х лет, когда все три таблиц соединяются.