想象一下,我有一项运动,我有一张桌子,MATCH和一张桌子PLAYER,还有一张桌子MATCH_PLAYER。 MATCH_PLAYER表显然将特定的比赛链接到某些玩家,并且在MATCH_PLAYER表中,我存储了信息,例如每个玩家的位置,得分数等。比赛表包含哪个队获胜,比赛日期等。

当您提供玩家ID时,我可以使用该查询进行查询,例如“ player_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一起玩时的胜率是多少”。

这显然是数据库背后的基本思想,但我无法终生弄清楚我想做什么的术语,因此很难进行搜索。

最佳答案

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

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]


如果您打算超越两三个玩家,那么通过集合匹配还有其他一些方法可能会随着玩家数量的增加而更加有效,但是对于您而言,这可能是最快的。

关于mysql - 查看是否存在两个表行,内部连接到另一行,我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/36178018/

10-10 13:42