2012-02-19 3 views
0

좋아요, 그렇기 때문에 복잡한 JOIN이라고 생각되는 쿼리가 필요합니다. 나는 서로의 "아이들"의 일종 인 3 개의 테이블을 가지고있다. 맨 위 테이블은 "clan_members"입니다. 다음은 "roster_members"로 clan_member id를 얻습니다. 맨 아래 하나는 "match_players"로 roster_members 아이디를 얻습니다. clan_members 테이블의 모든 결과를 처리하는 루프를 작성했습니다. . 내가 그 일족의 멤버가 연주 얼마나 많은 일치 발견되고 싶은 것은 여기에 세 개의 테이블의 레이아웃입니다 : 내가 전에 세 가지 서로 다른 테이블에 가입 한 적이있다MySQL은 세 개의 테이블로 왼쪽으로 결합합니다.

[clan_members] 
    -id 
    - member_id 
    -join_date 

[roster_members] 
    - id 
    - clan_member_id 
    - title 

[match_players] 
    - id 
    - roster_member_id 
    - match_id 

난 아무 생각이 무엇인지 그들을 누군가에게 질의 할 수 있으면 크게 감사 할 것입니다.

+1

주문은 중요하지 않으며 SO 커뮤니티는 요청하기 전에 무언가를 시도했다는 것을 증명하는 것을 선호합니다. –

+0

@OMGPonies : 'INNER JOIN'의 경우, 아니오. LEFT JOIN의 경우 예. –

답변

0

이 쿼리는 당신에게 ID (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 테이블에서 id라는 이름으로 호출되었지만 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의의 #을 얻을 것이다.

관련 문제