找到反复的战斗

时间:2013-11-06 04:13:52

标签: mysql sql recursive-query

我有一个包含以下字段的表:

battle_id, winner, looser  
 1  200    44  
 2   55   366  
 3   44   200  
 4  123   200  
 5  200    44  
 6   55   366  
 7  177   205  
 8  188   211  
 9  366    55  
10   55   366
现在它有大约1300个记录(它的小),大约有400个玩家,每次战斗中只能有一个胜利者和一个更宽松的(没有抽奖)

我怎样才能找到所有重复的战斗?我不想找到一个玩家的所有重复战斗,我想知道所有玩家的所有重复战斗......我知道我在php中制作一个递归函数,迭代所有战斗并分配它们到一个矩阵,但只是为了好玩......有没有办法只在mysql上做?

我如何优化表格以更快地找到重复的战斗?

问候

编辑:

例如,我希望查询显示:

battle_id, winner, looser  
 1  200    44  
 2   55   366  
 3   44   200  
 5  200    44  
 6   55   366  
 9  366    55  
10   55   366

2 个答案:

答案 0 :(得分:2)

这应该有效,使用自联接可能会导致许多重复的条目

<强> SQLFIDDLE

SELECT
    t1.battle_id,
    t1.winner,
    t1.loser
FROM
    your_table t1
WHERE
    EXISTS (
             SELECT
                 1
             FROM
                 your_table t2
             WHERE
                 ( ( t1.winner = t2.winner
                 AND t1.loser = t2.loser )
                 OR ( t1.loser = t2.winner
                 AND t1.winner = t2.loser ) )
                 AND t1.battle_id <> t2.battle_id
    )

答案 1 :(得分:1)

试试这个:

SELECT b1.battle_id,
       b1.winner,
       b1.looser 
FROM   battles as b1
group  by b1.battle_id, b1.winner,  b1.looser 
having count(*)>=2