2012-02-19 219 views
0

好的,所以我有一個查詢,需要我認爲是一個複雜的JOIN。我有三張桌子,彼此之間有些「小孩」。頂部表格是「clan_members」。接下來是獲得clan_member id的「roster_members」。最下面的是獲得roster_members id的「match_players」。我寫了一個循環,讓我通過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社區更喜歡你證明你在詢問之前已經嘗試了某些東西。 – 2012-02-19 06:24:23

+0

@OMGPonies:對於'INNER JOIN',沒有。對於'LEFT JOIN',是的。 – 2012-02-19 11:39:33

回答

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個數。