2012-02-19 184 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个数。