查看是否存在两个表行,inner连接到另一行

时间:2016-03-23 12:19:52

标签: mysql sql sqlite inner-join

想象一下,我有一项运动,我有桌子,MATCH和桌子PLAYER,以及桌子MATCH_PLAYER。 MATCH_PLAYER表显然将某个匹配链接到某些玩家,并且在表MATCH_PLAYER中,我存储诸如每个玩家所玩的位置,得分点数等信息。 MATCH表包含哪支队伍获胜,比赛日期等等。

我可以进行查询,例如"当player_id播放时,%赢取率是多少?#34;使用此功能,当您提供玩家ID时:

    SELECT
                    sum(case when m.win_left = mp.left then 1 else 0 end) * 100.00
                        / count(*) as win_percentage
    FROM
                    match m
                    inner join match_player mp
                        on mp.match_id = m.id
    WHERE mp.player_id = [whatever]

然而,我不知道的是如何说"当player_id x和player_id y一起玩时,%赢率是多少"。

这显然是数据库背后的一个基本理念,但我不能为我的生活找出我想做的术语,所以搜索它一直很难。

1 个答案:

答案 0 :(得分:1)

只需加入桌子两次 - 每位玩家一次:

SELECT
    SUM(CASE WHEN (m.win_left = mp.left) AND (M.win_dire = MP2.left) THEN 1 ELSE 0 END) * 100.00
        / COUNT(*) AS win_percentage
FROM
    Match M
INNER JOIN Match_Player MP1 ON
    MP1.match_id = M.id AND
    MP1.player_id = [whatever]
INNER JOIN Match_Player MP2 ON
    MP2.match_id = M.id AND
    MP2.player_id = [whatever #2]

如果你要超过两三个玩家,那么通过集合匹配可以提高其他一些方法,随着玩家数量的增加可能更有效,但对于你的情况,这可能是最快的。